请教一个 unsigned char 和 signed char 的小问题

2016-10-24 20:28:23 +08:00
 likeunix
c 语言
char c = 0xff;
char *cp = &c;
printf("%x",*cp);
输出结果是 ffffffff ,当把第二行换成
unsigned char *cp = &c;
时,输出就是 ff 。这是为什么啊,不都是指向一个字节的指针吗?
2002 次点击
所在节点    Linux
4 条回复
Zzzzzzzzz
2016-10-24 20:49:24 +08:00
%x 会先转成 unsigned int 的
radiolover
2016-10-24 20:52:16 +08:00
signed/unsigned char 都会先进行整型提升到 int/unsigned int
signed char 最高符号位扩展(补码), unsigned char 其实是 0x000000ff
很简单的东西,楼主刚入门吧
likeunix
2016-10-24 20:54:52 +08:00
@radiolover
@Zzzzzzzzz 确实刚入门,谢谢两位啦
FrankHB
2016-10-27 23:58:58 +08:00
@Zzzzzzzzz 然而事实是 default argument promotions 跟%x 并没什么卵关系,扔进去个整数类型都提升,扔进去个 float 给转成 double ,至于对不上号 UB 作死了是另一回事。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/315119

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX