gcc中char默认是有符号数,但是“char a = 255;”是正确的,a会自动保存为-1。如下代码:
char ch = 255;
printf("ch = %d\n", ch);
|
结果为-1。
那么,这里有这么一个现象:
char ch = 255;
ch -= 128;
printf("ch = %d\n", ch);
|
得到的结果为“ch = 127”,这并不是因为255
- 128 = 127,而是-1 - 128 = 127。因为char是单字节的,-1 - 128是不够减的,由于存储空间只有8位,第九位无法表示符号,所以被舍弃,丢了符号位的数字转换为二进制成为了127。
这里举个简单点的例子:
-128的8位二进制为1000 0000
-128 - 1 得到的8位二进制为
0111 1111 (DEC:127)
这是因为,8位二进制无法表示-129,舍弃第九位后,就变为127了。
如何查看自己的gcc对char的处理呢?方法如下:
#include <limits.h>
int main()
{
printf("CHAR_MIN
= %d\n", CHAR_MIN);
return
0;
}
|
在limits.h中定义了char的最小值CHAR_MIN,如果CHAR_MIN = -128,则char是有符号数,如果CHAR_MIN = 0,则char是无符号数。
没有评论:
发表评论