C语言里字符的问题

tom555cat 2012-02-04 09:09:09
char c1;
c1=100011;
printf("%d",c1);
打印结果为-85
c1=1011;
printf("%d",c1);
打印结果为-13
这里-85,-13是什么东西
...全文
75 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤独小剑 2012-02-04
  • 打赏
  • 举报
回复
c1是char而100011和1011都是整形,所以赋值的时候自动舍掉高位只留最后八位的值,你把1011改为1024那c1就是0,赋值1026那c1就是2。
jicongyue123 2012-02-04
  • 打赏
  • 举报
回复
个人理解:我就讲第二个输出为什么会是-13,首先在c语言中1011默认为整型(占四个字节),而c1声明为char(占1个字节),1011的二进制表示为:00000000 00000000 00000011 11110011,当把int型1011赋值给char型c1时,会发生截断,也就是只把最后一个字节赋值给c1即:11110011,这个二进制在计算机里为补码,因为最高位为1,所以表示复数,现在转换成源码为(除最高位,其余取反然后加1)10001101,这个二进制数的最高位为1代表复数,其余7为换算成10进制为13,所以结果为-13.
面包大师 2012-02-04
  • 打赏
  • 举报
回复
1011是十进制,对应的二进制是0000 0000 0000 0000 0000 0011 1111 0011
当你将十进制的1011赋值给char c1时,只是将他的低八位赋值给了c1,即c1的二进制表示就是
1111 0011,当你用%d打印的时候,要打印的十进制,是32位,打印的时候就会把高位补足,补足的方式是重复最高一位1,所以就变成了1111 1111 1111 1111 1111 1111 1111 0011,就变成了-13
-85类似。。。
yunwuxin009 2012-02-04
  • 打赏
  • 举报
回复
范围超了吧
lee_鹿游原 2012-02-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sagegz 的回复:]

char类型的范围是-128~127。在内存中以8位补码形式存放。
1011在内存中是
0000 0011 1111 0011
截断,保留低位
所以在内存中是1111 0011
对应的原码就是-13
前面的类似。
[/Quote]
++
sagegz 2012-02-04
  • 打赏
  • 举报
回复
char类型的范围是-128~127。在内存中以8位补码形式存放。
1011在内存中是
0000 0011 1111 0011
截断,保留低位
所以在内存中是1111 0011
对应的原码就是-13
前面的类似。

69,382

社区成员

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

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