今天看到个别人提的问题,不懂便查了点资料解决了(可能很简单,但之前确实不清楚)。问题如下:
运行结果是什么?
结果为:fffffff4 f8
思路为:
开始想着这肯定跟类型范围有关,int 为-2的31次方 到 2的31次方减1,unsigned int 为0 到 2的32次方。
后来想到 int是带符号类型,最高位为符号位,所以 a 的最高位1是表示符号位。
最后查到右移的介绍如下:
右移有两种,算术右移(带符号)>>和逻辑右移(不带符号)>>>。
算术右移:符号位不变,左边补上符号位。如: 1000 1000 >> 3 为 1111 0001
逻辑右移:符号位一起移动,左边补上0。如:1000 1000 >>> 3 为 0001 0001
注意:移位的位数不能超过数据的大小,不能小于0。
所以a右移24位,全补上符号位1,即前24位均为1,后8为的16进制为f8;
b右移24位,全补0,即得000000f8。