- 论坛徽章:
- 0
|
谢谢2楼的解答,按照你的提示,我把代码修改如下:
#include <stdio.h>
int main(void)
{
unsigned char uc=-1;
unsigned short us=-1;
unsigned int ui=-1;
printf("sizeof(uc)=%x, max value=%x\n",sizeof(uc),uc);
printf("sizeof(us)=%x, max value=%x\n",sizeof(us),us);
printf("sizeof(ui)=%x, max value=%x\n",sizeof(ui),ui);
printf("1:uc+1 = %x\n",uc+1);
uc += 1;
printf("2:uc+1 = %x\n",uc);
printf("1:us+1 = %x\n",us+1);
us += 1;
printf("2:us+1 = %x\n",us);
printf("1:ui+1 = %x\n",ui+1);
ui += 1;
printf("2:ui+1 = %x\n",ui);
return 0;
}
运行结果:
sizeof(uc)=1, max value=ff
sizeof(us)=2, max value=ffff
sizeof(ui)=4, max value=ffffffff
1:uc+1 = 100
2:uc+1 = 0
1:us+1 = 10000
2:us+1 = 0
1:ui+1 = 0
2:ui+1 = 0
这说明:
1、%d换为%x,能在一定程度上解决问题
2、若printf函数里,设计计算,貌似会先将其提升为整型。(这里无法考证是提升为有符号还是无符号,因为unsigned char、unsigned short对比int太短了)
3、若计算不在printf里进行,则一切都是正确的。
还有一个问题:
unsigned int好像不受上述影响。why?? |
|