1.是这样规定的,如果硬要理解的话,可以这样理解:16位的-128是1000000010000000,而8位恰好位于分界点,在8位的范围内,-127到127肯定是很好理解的,而10000000表示-128理解成-0也行,理解成-128也行,采取后者正好跟16位的兼容,所以更佳!2.定点补码表示纯小数,第一位的1表示负数,0000000表示数值,补码的补码是源码,所以0000000的补码是取反加一,等于1,所以等于-1.
char 型的范围是-128~127,----对。
-128是没有原码的, ----对。
请问下
#include
main()
{
char a=-128;----数字-128,以补码存入变量 a。
printf("%d",a);----显示数字-128。
}
为什么输出的还是-128,不是说-128是没有原码的吗?
--高级语言,在人机对话时,是“数字”,不是“代码”。
在请问下,在8位二进制中(有符号的),最小负整数是多少?
--是-128。
那a=- 128 printf("%d",a)a=-128 给的是原码 还是补码呢
--高级语言,在人机对话时,是“数字”,不是“代码”。
==============================
学习、使用高级语言时,并不涉及任何代码。
但是,有些 C 语言教材,偏偏要讲些多余的知识。
实际上,教材作者,不过就是卖弄风情而已。
计算机中的代码,种类很多了:BCD 码、余三码、格雷码。。。
为什么不再多讲一些,因为,他们不懂也不会。
对于你的问题,我想说的是,在C语言中,计算机内部存储的是"补码",但是你在编程是确实不需要关心是"原码"还是"补码",C语言把数据表示为"10进制"后,谈原码与补码没有任何意义.
记住,原码、反码和补码只有在需要在深入理解内存中二进制的表示和C语方的减法实现时才有意义。
要得到一个数的二进制很容易,在printf中用%x格式符即可:
#include
main()
{
char a=-128;
printf("%x",a);
}
上述输出程序应该是: (ff80)H
对应的二进制为:1111 1111 1000 0000 (注意一个16进制位表示对应4个二进制位)
由于char只有8位,刚好一个整数的低8位,所以
a=-128=80H=1000 0000 B
如果按原码来看,似乎是 -0,如果展开为无符号数,为1*2^7= 128,
当然还是-128,你在printf里面指定%d意思就是让它把a解释成一个整数呀。如果你想看看a在内存中的值你应该让它打印成16进制的,也就是把%d改成%02x。
八位有符号数最小负整数是-127。
现在的计算机默认情况下只有补码一种表示带符号整数的方式。所以你写程序除非自己设计规则,是不可能有原码什么事的
原码因为有-0的关系,负数比补码少一个,最小是-127。
----
补码。