char的范围是-128到127 那要是赋值为char a=522;那最后a的值会变成什么值呢?

如题所述

你好!!!
以下我们讨论的是我们定义的有符号的字符类型即char a,而不是unsigned char a;
比如:把129赋值给a,即a=129,首先整型129在内存中占2个字节(有的系统不同,也可能占4个字节,我们讨论的是占2个字节):0000 0000 10000 1010
而字符占一个字节,因此赋值后会把整型的低八位赋值给字符变量a ,即
1000 1010,它的最高为是1,代表负值,计算机处理负值是按补码的方式处理,即补码是(楼主不知道的话可以自己找点资料看看);1111 0101,最高为是1代表是负数即为-127
代码:
#include <stdio.h>

void main()
{
char a=129;
printf("%d\n",a);
}
结果:
-127
Press any key to continue

要是把522赋值给a即a=522;522对应的二进制是0000 0010 0000 1010
也是把低八位赋值给a;即:0000 1010,最高为是0代正数,计算机处理正数时,补码和二进制一样即 :0000 1010,对应的十进制是10
代码:
#include <stdio.h>
void main()
{
char a=522;
printf("%d\n",a);
}

测试:
10
Press any key to continue
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-26
以下我们讨论的是我们定义的有符号的字符类型即char a,而不是unsigned char a;
比如:把129赋值给a,即a=129,首先整型129在内存中占2个字节(有的系统不同,也可能占4个字节,我们讨论的是占2个字节):0000 0000 10000 1010
而字符占一个字节,因此赋值后会把整型的低八位赋值给字符变量a ,即
1000 1010,它的最高为是1,代表负值,计算机处理负值是按补码的方式处理,即补码是(楼主不知道的话可以自己找点资料看看);1111 0101,最高为是1代表是负数即为-127
代码:
#include <stdio.h>

void main()
{
char a=129;
printf("%d\n",a);
}
结果:
-127
Press any key to continue

要是把522赋值给a即a=522;522对应的二进制是0000 0010 0000 1010
也是把低八位赋值给a;即:0000 1010,最高为是0代正数,计算机处理正数时,补码和二进制一样即 :0000 1010,对应的十进制是10
代码:
#include <stdio.h>
void main()
{
char a=522;
printf("%d\n",a);
}

测试。
第2个回答  2010-08-27
你把522写成16进制,取最后的8位看一下,是和-128到127之间的哪个数字相同,就知道了
相似回答