问个char和int关系的问题

benbshmily 2009-11-03 11:08:28
char ch = 0;
int i = -1;
ch = i;
printf("%d, ",ch);
结果是-1

i是4字节,ch是1字节。我想知道i是怎么把这个-1赋值给ch的。内存中的i保存的是-1的补码呀。赋值结果ch应该是255才对啊。
不解。
同时,sizeof(++i);后为啥i的值不会自加1;
有了答案马上结贴。谢谢各位。
...全文
90 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
selooloo 2009-11-03
  • 打赏
  • 举报
回复
ch是 11111111
因为char 属于有符号数,首位符号位是负数,减1,取反就是它的值,就是-1;
如果这样定义 unsigned char ch;
printf("%d, ",ch); 就是255
benbshmily 2009-11-03
  • 打赏
  • 举报
回复
哦,明白了。ch其实是保存的i的最低字节。11111111.我是%d有符号型打印,所以是-1.昏。谢谢各位。
满意结贴
cnStreamlet 2009-11-03
  • 打赏
  • 举报
回复
第一个问题,ch 就是 255,无符号的 255 就是有符号的 -1 么
LZ 既然知道内存中保存的是 -1 的补码,为何反而怀疑 -1 的补码不是 -1 呢?
pengzhixi 2009-11-03
  • 打赏
  • 举报
回复
sizeof是不关心表达式的结果,它只关心类型
morilasi 2009-11-03
  • 打赏
  • 举报
回复
sizeof(++i)
在编译期间计算。比如cout<<sizeof(i)
你会发现编译出的汇编代码跟cout<<4是一样的
Eveilei 2009-11-03
  • 打赏
  • 举报
回复
第一个问题,不解。
pengzhixi 2009-11-03
  • 打赏
  • 举报
回复
sizeof 是不会帮你计算的。
jzd8000 2009-11-03
  • 打赏
  • 举报
回复
sizeof(++i)
算的还是i这个整形变量的大小,当然不变。
数据保存在内存里,你可以认为它是不分类型,
你printf什么类型的,他就按你指定的类型把数据显示出来。
cattycat 2009-11-03
  • 打赏
  • 举报
回复
%d输出时,按有符号,最高位1表示负号。
lihan6415151528 2009-11-03
  • 打赏
  • 举报
回复
只是把首地址给了ch了
s_rlzheng 2009-11-03
  • 打赏
  • 举报
回复
你用printf("%c ", ch);就可以输出255的字符了。
因为你用了%d,所以打印出来的当然是整型啦,也就是-1。
sizeof是不计算里面的,当然不会自加1啦。

69,382

社区成员

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

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