[問題] 補數

作者: mater2004 (mater)   2015-06-24 23:30:52
short n=12
n的二進位值為 0000000000001100
~n運算後變為 1111111111110011
問題
為何1111111111110011在十進位是 -13
short範圍-32768到32767
我覺得應該是很靠32767的一個值
作者: kdjf (我抓得到什麼呢?)   2015-06-24 23:37:00
32767=b0111111111111111喔
作者: softseaweed (Gladys von Wackenheim)   2015-06-24 23:37:00
補數可把第一個bit當做sign bit, 1代表負 0代表正況且那串不會很靠近32767,2^15就32768,後面還一串
作者: mater2004 (mater)   2015-06-24 23:45:00
32767為何是0111111111111111阿? 有什麼規則定的嗎?我剛算了一下 這樣就是-13 頭怎不是從000000000000000開始呢
作者: softseaweed (Gladys von Wackenheim)   2015-06-24 23:47:00
你知道二進位怎麼做的嗎? 位值記數法?
作者: mater2004 (mater)   2015-06-24 23:49:00
不知道 剛看不久而已
作者: softseaweed (Gladys von Wackenheim)   2015-06-24 23:51:00
那你先把位值記數法跟二進位搞懂後再來看補數...
作者: mater2004 (mater)   2015-06-24 23:56:00
我不懂你說的是什麼? google找不太到,如果是計算轉換我會。
作者: softseaweed (Gladys von Wackenheim)   2015-06-25 00:05:00
你會轉換怎麼會不知道為何32767=b0111111111111111簡而言之 二補數不用想太多 最左邊的bit若是1該數就是負的,若是0該數就是零或正的若是正數或零就跟一般二進位一樣換算即可負數請先NOT過後加1就會得到相對應的二進位值換算該值後在前面加上一個減號就是你要的數字了正數轉負數也是NOT過後+1
作者: mater2004 (mater)   2015-06-25 00:14:00
我知道我哪裡弄錯了,你還告訴我另一個東西。謝謝

Links booklink

Contact Us: admin [ a t ] ucptt.com