为什么
的结果include <stdio.h>
int main()
{
unsigned short int i = 0xff ;
unsigned short int j;
j= i<<2;
printf("%x n%x\n", i, j);
return 0;
}
是j = 3fc?
如果i和j都是short int - 所以它们是2bytes值,所以j shouldnt = fc ??
提前解释。 〜答案 0 :(得分:4)
不,0x3fc是正确的。请注意,一个字节是两个十六进制数字,因此(16位)短数字总共有4个十六进制数字。
答案 1 :(得分:4)
移位0xff左边两位看起来像这样:
0000 0000 1111 1111 0 0 f f 0000 0011 1111 1100 -- Shifted left 2 bits. 0 3 f c
所以0x00ff&lt;&lt; 2 = 0x03fc。一切看起来都应该如此。
答案 2 :(得分:1)
0xff << 2 == 0xff * 4 == 0x3fc == 1020
即使它们是2字节,也可以保留这个小值。
答案 3 :(得分:1)
3FC只需要存储12位,因此可以存储在2个字节中。
答案 4 :(得分:0)
C ++不保证unsigned short int
中的字节数。事实上它几乎不能保证char
以外的任何类型的大小,保证是1字节。
在这种情况下虽然它无关紧要,因为3fc只能成功存储在2个字节中。
答案 5 :(得分:0)
也许这就是你真正想写的东西? (记住一个十六进制数字只有4位,即半个字节)
#include <stdio.h>
int main()
{
unsigned short int i = 0xffff;
unsigned short int j;
j = i<<8;
printf("%x %x\n", i, j);
return 0;
}
这会输出ffff ff00