简单问题求助!谢谢

yaya_lucky 2012-09-21 11:05:22
int main ()
{
int a = -256;
char b = -a;
printf("%d\n", b);

return 0;
}

b 为什么会=0, char的范围是 -127----127 ? 是怎么转换的呢 256是怎么转换成0的呢 ?
...全文
112 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2012-09-21
  • 打赏
  • 举报
回复
等价于 char b = 256; 256 的十六进制 0x100, char 只有一个字节, 前面的 1 被截断。
qfl_sdu 2012-09-21
  • 打赏
  • 举报
回复
char 类型到255,256越界了
wintree 2012-09-21
  • 打赏
  • 举报
回复
一楼正解,把长的赋给断的,会截取后边的。
L_chxu 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

如果int 型为2个字节的,256的存储方式如下:
00000001 00000000
由于char型只有一个字节
当int转化为char时,只能装下右边的那一个字节
故b 为 00000000
char的范围

最大存储 01111111
2^7-1=127

写错了,修改下

最小存储 10000000
2^(-8)=-128

所以char类型的范围为-128~12……
[/Quote]
L_chxu 2012-09-21
  • 打赏
  • 举报
回复
如果int 型为2个字节的,256的存储方式如下:
00000001 00000000
由于char型只有一个字节
当int转化为char时,只能装下左边的那一个字节
故b 为 00000000
char的范围

最大存储 01111111
2^7-1=127

最小存储 10000000
2^(-8)=-128

所以char类型的范围为-128~127
fjp790308446 2012-09-21
  • 打赏
  • 举报
回复
char不指定signed/unsigned时默认是unsigned,故范围是0~255,其他解释看1楼
ouPuso 2012-09-21
  • 打赏
  • 举报
回复
1楼正解
图灵狗 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

等价于 char b = 256; 256 的十六进制 0x100, char 只有一个字节, 前面的 1 被截断。
[/Quote]

++

69,371

社区成员

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

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