第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进制加法,其实还是要看是有符号数还是无符号数,如果是无符号数溢出则结果仍正确,如是有符号数溢出了,则会导致运算结果错误。