c语言1左移32位(1

您所在的位置:网站首页 c语言c是多少 c语言1左移32位(1

c语言1左移32位(1

2024-07-17 09:59| 来源: 网络整理| 查看: 265

int i = 1; i = i > 1;  //i的值不会变成0x40000000,而会变成0xc0000000 就是说,符号位向右移动后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.      负数10100110 >>5(假设字长为8位),则得到的是  11111101 总之,在C中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变.实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多. 参考资料:http://hi.baidu.com/todaygoodhujun/blog/item/b8c10dd15ae4dfd3572c8417.html C语言中的移位操作,内容不多。不过有些地方你不注意,就疏忽了。   先做两个小题先。   (1)unsigned char x=3;   x1是多少?   (2)char x=3;   x1是多少?   (3)char x=-3;   x1是多少?   3写成二进制数是00000011;-3写成二进制数是(补码)11111101。   程序执行的时候,操作的是数值的编码表示,也就是数值在内存中的二进制表示。比如说,程序取-3的时候,就去取11111101。   (1)对无符号数3来说,x1往右边移一位,由于是无符号数,所以逻辑右移,最右边一位移掉,最左边移进来的位补零,变成00000001,所以结果是1。   (2)对于有符号数3来说,x1往右边移一位,由于是有符号数,可能发生逻辑右移,也可能发生算术右移,这一点,C标准并没有明确地指定是使用逻辑右移还是算术右移。但大多数的机器都使用算术右移,变成00000001,所以结果还是1。但是请注意,这只是说大多数的机器是这样的,你敢保证自己不会碰到特殊情况吗?   (3)对于有符号数-3来说,x



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3