哪位大仙教教我机器字长为16位,
计算机中的数是用二进制数来表示的,数的符号也是用二进制数表示的。在机器中,把一个数连同其符号在内数值化表示的数称为机器数。一般用最高有效位来表示数的符号,正数用0表示,负数用1表示。机器数可以用不同的码制来表示,常用的有原码、补码和反码表示法。 由于多数机器的整数采用补码表示法,80x86机也是这样。这里只介绍补码表示法。
补码表示法中正数采用符号-绝对值表示,即数的最高有效位0表示符号为正,数的其余部分则表示数的绝对值。例如,假设机器字长为8位,则00000001,[+127]补=01111111,[+0]补=00000000。
当用补码表示法来表示负数时则要麻烦一些。负数X用2n...全部
计算机中的数是用二进制数来表示的,数的符号也是用二进制数表示的。在机器中,把一个数连同其符号在内数值化表示的数称为机器数。一般用最高有效位来表示数的符号,正数用0表示,负数用1表示。机器数可以用不同的码制来表示,常用的有原码、补码和反码表示法。
由于多数机器的整数采用补码表示法,80x86机也是这样。这里只介绍补码表示法。
补码表示法中正数采用符号-绝对值表示,即数的最高有效位0表示符号为正,数的其余部分则表示数的绝对值。例如,假设机器字长为8位,则00000001,[+127]补=01111111,[+0]补=00000000。
当用补码表示法来表示负数时则要麻烦一些。负数X用2n-|X|来表示,其中n为机器的字长。当n=8时,[-1]补=28-1=11111111,而[-127]补=28-127=10000001,显然,最高有效位为1表示该数的符号为负。
应该注意,[-0]补=28=00000000,所以在补码表示法中0只有一种表示,即00000000。对于10000000这个数,在补码表示法中被定义为-128。这样,8位补码能表示数的范围为-128~+127。
下面介绍一种比较简单的办法来写出一个负数的补码表示:先写出与该负数相对应的正数的补码表示(用符号-绝对值法),然后将其按位求反(即0变1,1变0),最后在末位(最低位)加1,就可以得到该负数的补码表示了。
例1。13 机器字长为16位,写出N=-117D的补码表示。
+117D可表示为
0000
0000
0111
0101
按位求反后为
1111
1111
1000
1010
末位加1后
1111
1111
1000
1011
用十六进制数表示为
F
F
8
B
即[-117D]补=FF8BH
例1。
4 如机器字长为8位,则-46D的补码表示为:
+46D可表示为
0010
1110
按位求反后为
1101
0001
末位加1后
1101
0010
用十六进制数表示为
D
2
即[-46D]补=D2H
在这里,顺便说明一下,用补码表示数时的符号扩展问题。
所谓符号扩展是指一个数从位数较少扩展到位数较多(如从8位扩展到16位,或从16位扩展到32位)时应该注意的问题。对于用补码表示的数,正数的符号扩展应该在前面补0,而负数的符号扩展则应该在前面补1。
例如,我们已经知道如机器字长为8位,则[+46]补=00101110,[-46]补=11010010;如果把它们从8位扩展到16位,则[+46]补=0000000000101110=002EH,[-46]补=1111111111010010=FFD2H。
收起