C语言的一个问题

[复制链接]
查看11 | 回复3 | 2010-12-2 12:15:58 | 显示全部楼层 |阅读模式
char temp=0;
temp-=2;
if(temp==(char)0xf0)
temp=-14;
要在temp等于-16的时候,就赋值为-14
为什么char类型的变量可以赋负数的值,为什么(char)0xf0等于-16

回复

使用道具 举报

千问 | 2010-12-2 12:15:58 | 显示全部楼层
C语言的char名义上是字符,实际上是一个整数,8个二进制位,其中1个符号位7个数据位,表示范围为-128~+127。其中0x00~0x7F 表示0~127,而0x80~0xFF则表示-128~-1(也就是表面的值减去256),所以0xF0表示的值是240-256也就是-16。 补充一点,比较temp是否等于-16完全可以直接写if(temp==-16),不必写成(char)0xf0。
回复

使用道具 举报

千问 | 2010-12-2 12:15:58 | 显示全部楼层
因为char, bool 什么的, 在C语言里,都是浮云。本质上,它们都是一个长度为1字节的整数。0xf0是负数,这跟:int x = (int)0xf0000000 是负数的本质是一样的。
回复

使用道具 举报

千问 | 2010-12-2 12:15:58 | 显示全部楼层
char 类型的变量,其值范围是 -128~127
0xf0 十进制是 240240 > 127 明显溢出,那结果就是,240-256=-16
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行