关于微机原理的16位2进制和16进制

问题:在8位2进制中,对于有符号数,最高位表示的是它的符号,取值范围是
-127~127.
那么对于16位2进制,它的最高位是不是也表示符号?
在计算机中,负数是以补码的形式存在的,0xFFFFH表示-1的补码,但它也可以表示一个正数吧,怎么知道它是正是负?
0FFFFH则是什么?为什么前面加了一个0?
十六进制数的符号怎么表示?
对于16进制加法,如果溢出了怎么办?
问的很乱,主要我自己不太懂,请达人回答,谢谢!

0xFFFFH表示-1的补码,0FFFFH则是什么?为什么前面加了一个0?0x表示的是?
答:其它的两位已经解释的很清楚了
十六进制数的表达方法
如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。
C,C++规定,16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也不区分大小写。(注意:0x中的0是数字0,而不是字母O)
以下是一些用法示例:
int a = 0x100F;
我们来看整数-1在计算机中如何表示。
假设这也是一个int类型,那么:
1、先取1的原码:00000000 00000000 00000000 00000001
2、得反码: 11111111 11111111 11111111 11111110
3、得补码: 11111111 11111111 11111111 11111111
可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF。
一切都是纸上说的……说-1在计算机里表达为0xFFFFFF,我能不能亲眼看一看呢?当然可以。利用C++ Builder的调试功能,我们可以看到每个变量的16进制值。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-22
找本计算机组成原理的书看看,或在网上看看原码、补码、反码是怎么回事。
原码:用一个符号位表示数据的正负,其余的代码表示数据的绝对值;
补码:正数的补码与原码相同,负数的补码等于原码按位取反后在最低位加一;
反码:正数的补码与原码相同,负数的反码等于原码按位取反。
从以上编码方法看出,二进制编码只与编码方式有关,而与数字位数无关。

现在回答你的具体问题:
1.对于16位2进制,它的最高位也包含了符号的信息,0为正,1为负;
2.0xFFFFH如果是补码,只能表示-1,不可以表示别的数字,更不可能是一个正数。因为它的最高位为1,所以可判断它是负数。
3.0FFFFH表示一个十六进制数(H表示HEX),前面加一个0以区别变量名FFFFH,避免产生歧义引起混淆,导致编译器不能编译;
4.十六进制数的符号信息体现在最高位,0为正,1为负;
5.对于16进制加法,如果溢出了,则会导致运算结果错误。
第2个回答  推荐于2016-10-02
二进制数据是采用位置计数法,其位权是以2为底的幂。例如二进制数据110.11,逢2进1,其权的大小顺序为2²、2¹、2º。
十六进制数的表达方法如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。C,C++规定,16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也不区分大小写。
第3个回答  2010-01-25
1.对于16位2进制,如果它是有符号数,则它的最高位也包含了符号的信息,0为正,1为负;
2.0xFFFFH如果是补码,只能表示-1,不可以表示别的数字,更不可能是一个正数。因为它的最高位为1,所以可判断它是负数。
3.0FFFFH表示一个十六进制数,为了区别变量名FFFFH,在前面加一个0,避免产生歧义引起混淆,导致编译器不能编译;
4.十六进制数的符号也是体现在最高位,0为正,1为负;
5.对于16进制加法,其实还是要看是有符号数还是无符号数,如果是无符号数溢出则结果仍正确,如是有符号数溢出了,则会导致运算结果错误。
相似回答