liuxianhua
級(jí)別: 論壇先鋒
![]() |
書上說16位數(shù)據(jù)寄存器的最高為符號(hào)位,0為正數(shù)1為負(fù)數(shù),正數(shù)的最大值為32767,負(fù)數(shù)的最大值為-32768,這我就不明白了,除了符號(hào)位外,其他15位都為1時(shí),加起來是32767,為什么負(fù)數(shù)能儲(chǔ)存最高數(shù)是-32768呢?懇請(qǐng)高手指點(diǎn),謝謝,謝謝!! |
---|---|
|
sjm213
有小知識(shí),無大學(xué)問。
級(jí)別: 論壇版主
![]() ![]() ![]() ![]() |
正數(shù)原碼與反碼、補(bǔ)碼一致; 負(fù)數(shù)反碼是將其原碼除符號(hào)位之外的各位求反,補(bǔ)碼是將反碼加1。 所以4樓的解釋是有問題的。 -5的二進(jìn)制的原碼是 1000 0000 0000 0101 反碼是 1111 1111 1111 1010 補(bǔ)碼是 1111 1111 1111 1011 ---------------------------------------------------------------------------------------------- 以下轉(zhuǎn)載,解釋有符號(hào)的數(shù)范圍為何是-(n+1)~n: 為什么要設(shè)立補(bǔ)碼呢? 第一是為了能讓計(jì)算機(jī)執(zhí)行減法: [a-b]補(bǔ)=a補(bǔ)+(-b)補(bǔ) 第二個(gè)原因是為了統(tǒng)一正0和負(fù)0 正零:00000000 負(fù)零:10000000 這兩個(gè)數(shù)其實(shí)都是0,但他們的原碼卻有不同的表示。 但是他們的補(bǔ)碼是一樣的,都是00000000 特別注意,如果+1之后有進(jìn)位的,要一直往前進(jìn)位,包括符號(hào)位。ㄟ@和反碼是不同的。 [10000000]補(bǔ) =[10000000]反+1 =11111111+1 =(1)00000000 =00000000(最高位溢出了,符號(hào)位變成了0) 有人會(huì)問 10000000這個(gè)補(bǔ)碼表示的哪個(gè)數(shù)的補(bǔ)碼呢? 其實(shí)這是一個(gè)規(guī)定,這個(gè)數(shù)表示的是-128 所以n位補(bǔ)碼能表示的范圍是 -2^(n-1)到2^(n-1)-1 比n位原碼能表示的數(shù)多一個(gè) |
---|---|
本帖最近評(píng)分記錄: |
sjm213
有小知識(shí),無大學(xué)問。
級(jí)別: 論壇版主
![]() ![]() ![]() ![]() |
樓上,要記。 在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來表示(存儲(chǔ))。 主要原因:使用補(bǔ)碼,可以將符號(hào)位和其它位統(tǒng)一處理;同時(shí),減法也可按加法來處理。另外,兩個(gè)用補(bǔ) 碼表示的數(shù)相加時(shí),如果最高位(符號(hào)位)有進(jìn)位,則進(jìn)位被舍棄。 --------------------------------------- 所以在PLC的地址寄存器中賦值一個(gè)負(fù)數(shù),在監(jiān)控其各個(gè)位就會(huì)發(fā)現(xiàn)1、0的排布與其反碼一致! |
---|---|
|