字符变量问题

[复制链接]
查看11 | 回复3 | 2011-7-16 11:08:10 | 显示全部楼层 |阅读模式
char x='\376';
printf("%d\n",x);
何解会输出-2呢
另外 char变量不是只能赋两种值吗 一种是字符型的'A' 一种是整型的-128~127
'\376'是什么意思呢

回复

使用道具 举报

千问 | 2011-7-16 11:08:10 | 显示全部楼层
首先转义字符如果是\后面带3个数字,那么这3个数字是八进制数,先转换成10进制数:3*64+7*8+6=254,但是char的范围只能是-128~+127,那么254必然会有溢出,先看254的二进制:11111110,但是char型数据的第一位是表示符号位,所以254转换成char型数据后,会变成负数!所以254转换成char型数据后的补码是:原:11111110反:10000001补:10000010所以这个数的值是-2...
回复

使用道具 举报

千问 | 2011-7-16 11:08:10 | 显示全部楼层
'\376'是三位8进制数。转换成十进制也就是254.\表示转义字符。\XXX后面是三位8进制数。254用二进制表示为1111 1110因为第一位是用来表示符号的,1表示负数。用补码表示为1000 0010也就是 -2....
回复

使用道具 举报

千问 | 2011-7-16 11:08:10 | 显示全部楼层
八进制376的二进制表达是:11111110但字符型只能是-128-127所以数据溢出,得先取反为:10000001再加1补码后为:10000010第一位表是符号位,为1时为负数为0时为正数,所以这个数的值是-2 。不知道你理解了没?...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行