C语言中的位运算符未按我期望的那样运行,这无疑是我的误解,但有人可以解释发生了什么吗?
unsigned char in = 155;
unsigned char res;
res = (in << 6) >> 7;
应该与
res = in << 6;
res = res >> 7; // can also use res >>= 7;
但事实并非如此。
第一个结果是:
in = 10011011
res = 01001101
第二个(如预期):
in = 10011011
res = 00000001
因此,在第一个实例中看起来像是对原始数据进行每个移位,而不是对第一个移位进行操作,然后对第一个结果进行第二个移位。有想法吗?
计算以int
秒为单位。在第二种情况下,您要分配给res
,在回退之前它将被截断为8位。在第一种情况下,您不是,因此不会发生截断,并且保留高位并将其向后移回。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句