老鐵們,大家好,相信還有很多朋友對于補碼運算與同余運算和同余運算規則的相關問題不太懂,沒關系,今天就由我來為大家分享分享補碼運算與同余運算以及同余運算規則的問題,文章篇幅可能偏長,希望可以幫助到大家,下面一起來看看吧!
補碼原碼反碼有必要學嗎
有必要學,
在計算機系統中,數值,一律采用補碼表示和存儲。
原碼和反碼,都是沒有任何用處的。
補碼的功能,類似于:
時針,倒撥3小時,可以用正撥9小時代替。
利用這種思路,計算機中的負數,也可以用正數(即補碼)代替。
于是,計算機中,就沒有負數了。
同時,減法運算,也都不存在了。
因此,借助于補碼,就能統一加減法,從而簡化計算機的硬件。
這就是使用補碼的原因。
十進制數與二進制補碼的相互轉換
學了好長時間,今天終于真正理解了計算機中負數的存儲,終于理解了補碼的運算!
1、補碼的運算:
已知十進制求二進制
求正整數的二進制補碼
除2取余,直到商為零,余數倒敘排列
求負整數的二進制
先求該負數絕對值的二進制代碼,然后將二進制代碼的所有位取反,再加1,然后在左邊補1作為符號位。如果要求用更多的位來表示,則相應的在符號位的左邊補1就行了。下面隨便列舉了一些數字,其他的相應模仿就行了:
負數:-5絕對值:5絕對值的二進制碼:101二進制反碼:010二進制補碼:011左邊再不一位1表示負數,即1011=(-1)*8+0*4+1*2+1*1=-5
補碼8位表示:11111011=(-1)*(2^7)+1*(2^6)+1*(2^5)+1*(2^4)……=-5
補碼16位16進制表示:FFFB=-5
以下的幾個數的例子的計算過程同上:負數:-14絕對值:14絕對值的二進制碼:1110二進制反碼:0001二進制補碼:10010=-14
補碼8位16進制表示:F2=-14
補碼16位16進制表示:FFF2=-14
負數:-27絕對值:27絕對值的二進制碼:11011二進制反碼:00100二進制補碼:100101=-27
補碼8位16進制表示:E5=-27
補碼16位16進制表示:FFE5=-27
負數:-79絕對值:79絕對值的二進制碼:1001111二進制反碼:0110000二進制補碼:10110001
補碼8位16進制表示:B1
補碼16位16進制表示:FFB1
負數:-127絕對值:127絕對值的二進制碼:1111111二進制反碼:0000000二進制補碼:10000001
補碼8位16進制表示:81
補碼16位16進制表示:FF81
負數:-128絕對值:128絕對值的二進制碼:10000000二進制反碼:01111111二進制補碼:10000000
補碼8位16進制表示:80
補碼16位16進制表示:FF80
行啦,就舉這么多,再多就啰嗦了。下面再說一下計算機中n位二進制補碼的十進制表示范圍。
2、n位二進制補碼的十進制表示范圍
8位二進制補碼最大能表示的正整數應該是127,即二進制為01111111,其中最左邊0為符號位,表示正數。8位二進制補碼最小能表示的負整數應該是-128,即二進制為10000000,其中最左邊1為符號位,表示負數,即(-1)*(2^7)。
其他的以此類推。
反碼加減法運算規則
1.反碼的加法運算:兩個反碼進行加運算,然后將進位數拿掉,用此數加上進位的那個數,如:[X]反=0.1011[Y]反=1.1010[X]反0.1011+[Y]反1.101010.0101+循環進位1[X+Y]反0.0110所以,x+y=0.0110
2.反碼的減法運算:兩個反碼表示的數相減,類似于補碼減法,將減數變符號,并根據變號后的減數取反,按反碼加法進行。
位數不同的補碼怎么算
符號位擴展,補齊后運算即可。例如:-1的4位補碼為1111;+1的8位補碼為000000001。顯然,兩個數相加的結果為零計算過程如下:
補碼如何運算
1.補碼的加法運算:將兩個補碼相加時,先將它們的數值部分按照普通的加法規則相加,然后再將其結果對補碼表示的范圍進行取模,得到最終的結果。原因是補碼表示的范圍是有限的,超出這個范圍的部分必須被舍去。
具體步驟如下:
①將兩個補碼按位對應相加,不進位。
例如:0110(+6)+0011(+3)=1001(-7)
②對上一步得到的結果進行進位。
例如:1001+0010=1011(-5)
③檢查最后一位進位是否有影響,若有,則舍去最高位。
例如:1011-1111=0100(+4),去掉最高位1,得到100(-4)
2.補碼的減法運算:將被減數和減數轉換成補碼形式,然后將它們相加即可得到差值。原因是在補碼的表示下,減法實際上就是加上對應數的補碼。
具體步驟如下:
①將被減數和減數轉換為補碼形式。
例如:8(00001000)-3(00000011)=8(00001000)+(-3)(11111101,補碼)
②將上面兩個數相加。
例如:00001000+11111101=11111011(-5)
③檢查結果是否超出了補碼表示的范圍,若有,則需進行取模操作。
例如:11111011-10000=01111011(+3),去掉最高位1,得到1111011(-5)
好了,本文到此結束,如果可以幫助到大家,還望關注本站哦!