请教一个 unsigned char 和 signed char 的小问题
- 0次
- 2021-07-01 18:45:28
- idczone
c 语言
char c = 0xff;
char *cp = &c;
printf("%x",*cp);
输出结果是 ffffffff ,当把第二行换成
unsigned char *cp = &c;
时,输出就是 ff 。这是为什么啊,不都是指向一个字节的指针吗?
%x 会先转成 unsigned int 的
signed/unsigned char 都会先进行整型提升到 int/unsigned int
signed char 最高符号位扩展(补码), unsigned char 其实是 0x000000ff
很简单的东西,楼主刚入门吧
确实刚入门,谢谢两位啦
然而事实是 default argument promotions 跟%x 并没什么卵关系,扔进去个整数类型都提升,扔进去个 float 给转成 double ,至于对不上号 UB 作死了是另一回事。