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