- 论坛徽章:
- 1
|
一个二进制移位产生的疑难问题……
printf不区分传入参数的类型,数据类型由格式符指定
%d的格式把数据转化为int型,而不管原来的数据类型是什么。
printf("sizeof(us) = %d %d\n", sizeof(us), (unsigned short)(us << 16));
us<<16得到32位数据11111111111111110000000000000000
转化为(unsigned short)后,高位截去就变成了0
若printf("sizeof(us) = %d %d\n", sizeof(us), (unsigned long)(us << 16)); 就会打印-65536
可以看一下:
- #include <stdio.h>;
- short us;
- main()
- {
- us = 0xffff;
- us <<= 8;
- printf("sizeof(us) = %d %d\n", sizeof(us), us);
- printf("sizeof(us) = %d %d\n", sizeof(us), (unsignec short)us);
- }
复制代码
结果就会不同。 |
|