关于C语言的一个小疑点~
求助:关于C语言的一个小问题~~
各位哥哥姐姐:
谁能帮忙解释一下这个程序啊?为什么是77这个结果?还有就是ASCII码值和字符是如何转换的呢?谢谢~~
#include "stdio.h"
void main()
{
char x,y;
x=111;
y=222;
printf("%d\n",x+y);
}
------解决方案--------------------
1. char的范围是-128~127, 所以"y = 222;"后,y的值其实为-34(0xDE或222), x + y = 111 - 34 = 77
2.
int code = 'a'; // 得到ASCII的值
char ch = code; //得到字符
------解决方案--------------------
因为你定义的x和y都是char型变量,也就是说只有8位,根据二进制的构成,char变量能表示的数的范围在0-256之间,超过这个范围的数字char就无法表示了
由于x和y都是char型,所以x+y的计算结果也是char型,那么虽然x+y=111+222=333, 但是由于超过了256,因此超过的部分被进位忽略了,所以结果是77
具体的进位忽略规则如下:
333的二进制表示为:
101001101
^
char只有8位,最高位的1会被忽略,所以只剩下:01001101
01001101(二进制)=77(十进制)
各位哥哥姐姐:
谁能帮忙解释一下这个程序啊?为什么是77这个结果?还有就是ASCII码值和字符是如何转换的呢?谢谢~~
#include "stdio.h"
void main()
{
char x,y;
x=111;
y=222;
printf("%d\n",x+y);
}
------解决方案--------------------
1. char的范围是-128~127, 所以"y = 222;"后,y的值其实为-34(0xDE或222), x + y = 111 - 34 = 77
2.
int code = 'a'; // 得到ASCII的值
char ch = code; //得到字符
------解决方案--------------------
因为你定义的x和y都是char型变量,也就是说只有8位,根据二进制的构成,char变量能表示的数的范围在0-256之间,超过这个范围的数字char就无法表示了
由于x和y都是char型,所以x+y的计算结果也是char型,那么虽然x+y=111+222=333, 但是由于超过了256,因此超过的部分被进位忽略了,所以结果是77
具体的进位忽略规则如下:
333的二进制表示为:
101001101
^
char只有8位,最高位的1会被忽略,所以只剩下:01001101
01001101(二进制)=77(十进制)