C 语言初学者 请高手指教

来源:百度知道 编辑:UC知道 时间:2024/05/07 01:50:03
C语言在内存中是如何存储的 各类信息转化为ASCLL数值 其值诺为正则以原码存储 诺为负数 则以补码存储---也就是 内存中存的都是 二进制码?
另有一题:
main()
{char c;
c=0362;
printf("%d\n",c);
}
结果为-14 为什么?
0362为八进制 数值应为3×64+6×8+2=244....所输入的 不是?244 请高手分析

C语言以一个字节来存储字符型数据,虽然八进制数362=二进制数011110010
char 表示有符号字符型,所以最左端的1被当成符号位。若要定义成无符号字符型unsigned char,则c为244.

不会

数据回绕!
首先八进制的0362 = 十进制242。
你定义的char为 有符号char
它在取值范围在-128 ~ 127 之间。

128 回绕则为-128
129 回绕则为-127
130 回绕则为-126
242 回绕则为-14

呵呵
这个是因为
0362=244,已经超出了char的表示范围
char的范围是
-128到127
所以会发生截断
0362是二进制的
011110010
保留右边8位是
11110010,
这个看成补码时就是
-14,也就是256-244
所以最后输出-14