c语言里的移位运算怎么算啊?

不是左移或右移相应位数然后补0吗?为什么15左移2位得60?15是01111左移2位不是11100不是-12吗?

15用2进制表示是:
00001111(1字节),
0000000000001111(2字节),
...
左移2位后是:
00111100(1字节),
0000000000111100(2字节),
...
都是60。
因为最小单位是字节。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-11-01
vc++6.0运行出来的确是11,反汇编代码如下面几位所给的,你估计也看不懂。这是一个有争议的代码,vs编译器和tc编译的结果又不一样,所以说这个只做下了解吧,二级c语言统考的时候应该不会出现这种题!
第2个回答  2019-10-27
移位运算是满一个int长度溢出,所以其实是
00000000 00000000 00000000 00001111在左移追问

那如果是64位计算机就要填满64个数字吗?第一个数字就是符号位?

追答

那你要看你写的数带不带有L或者LL的后缀,啥也不带就是普通的int
比如:
printf("%lld", 1LL << 32);
和printf("%lld", 1 << 32);是不一样的,

追问

所有的移位都要这样算吗

追答

不一定,有循环和非循环的区别

本回答被网友采纳
相似回答