关于char类型长度的疑问

chengdulang 2010-11-24 04:47:22
使用TC2.0
申明unsigned char a = 0
然后取反 a = ~a
输出printf("%x",a)
结果是ff。这个很容易理解
但是char a = 0
取反后用printf("%x",a)出结果是ffff.char怎么变成2个字节了。
盼望大家给我解释下。
...全文
151 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengdulang 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xiaoyuer5222 的回复:]
你试一下你的系统上sizeof(int)是多少,按照你上面的推测应该是2
如果是2的话,就对了
char a = 0;
a=~a=11111111; //最高位1位符号位,表示负
printf时会先将a进行整数提升为int,高8位会补符号位1,则11111111 11111111
[/Quote]

确实是printf的问题。我看了下函数的原型。printf 输出的是int。
iq02006 2010-11-24
  • 打赏
  • 举报
回复
c++primer上说 char有3中类型,char,unsigned char signed char,char 是什么类型由编译器决定,上面还说了,用char 型计算会出现一些不可预知的问题。
xiaoyuer5222 2010-11-24
  • 打赏
  • 举报
回复
你试一下你的系统上sizeof(int)是多少,按照你上面的推测应该是2
如果是2的话,就对了
char a = 0;
a=~a=11111111; //最高位1位符号位,表示负
printf时会先将a进行整数提升为int,高8位会补符号位1,则11111111 11111111
chengdulang 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 try325 的回复:]

printf("%x",a)的结果
[/Quote]

为什么申明成unsigned char就是FF?
try325 2010-11-24
  • 打赏
  • 举报
回复
printf("%x",a)的结果
chengdulang 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wq294948004 的回复:]

不知道问什么哦。

我做了测试,char,不一定是FFFF,我这是FFFFFFFF,根据机器位数的。
[/Quote]
都给你说了的嘛。我用的TC2.0。我用Gcc还是FFFFFFFF
wq294948004 2010-11-24
  • 打赏
  • 举报
回复
不知道问什么哦。

我做了测试,char,不一定是FFFF,我这是FFFFFFFF,根据机器位数的。
sewinten 2010-11-24
  • 打赏
  • 举报
回复
不明真相,坐等解释
chengdulang 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 try325 的回复:]

char的长度是1个字节
[/Quote]

。。。。。。。。。。。。我就是知道是1字节才请问你为什是4个FFFF不是2个。
try325 2010-11-24
  • 打赏
  • 举报
回复
char的长度是1个字节

69,373

社区成员

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

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