求解unsigned char 与char

pxy莫棋 2012-09-02 05:57:48
求解,如下
char p=122;
char *ts=&p;
printf("%8x",*ts);

输出为:7a
而如果改为

char p=254;
char *ts=&p;
printf("%8x",*ts);

输出为fffffffe
?


...全文
178 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovethinkpad 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

lz compiler 默认的char 是 signed 的
[/Quote]
我觉得这个是欠妥的,char默认类型是由编译器决定的!
AnYidan 2012-09-03
  • 打赏
  • 举报
回复
lz compiler 默认的char 是 signed 的
赵4老师 2012-09-03
  • 打赏
  • 举报
回复
char p=254;
char *ts=&p;
printf("%8x",(unsigned char)*ts);

shen_wei 2012-09-03
  • 打赏
  • 举报
回复
char 的范围,-127 - 127
unsigned char 0 -155 注意数据的取值范围@@
northcan 2012-09-03
  • 打赏
  • 举报
回复
char p=254;
char *ts=&p;
printf("%8x",*ts);

有符号char类型,正数最大就是127,最高位是符号位
254存储到p里面,相当于-2(0xfe),按补码存的
负数的符号位是1,扩展的时候是前面全都是1
lovethinkpad 2012-09-03
  • 打赏
  • 举报
回复
如果楼主想要输出地址的话,应该用“%s”;
pxy莫棋 2012-09-03
  • 打赏
  • 举报
回复
嗯,谢谢大家了!懂了~
SKATE11 2012-09-02
  • 打赏
  • 举报
回复
楼主理解补码吗 理解的话就懂了
图灵狗 2012-09-02
  • 打赏
  • 举报
回复
printf的%x会解释为int类型,相当于会自动把p从char类型扩展到int类型:
1、122是正数所以其符号扩展为0,相当于0x0000007a;
2、254是负数所以其符号扩展为1,相当于0xfffffffe。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧