[問題] 補數

看板C_and_CPP (C/C++)作者 (mater)時間10年前 (2015/06/24 23:30), 編輯推噓2(2017)
留言19則, 3人參與, 最新討論串1/1
short n=12 n的二進位值為 0000000000001100 ~n運算後變為 1111111111110011 問題 為何1111111111110011在十進位是 -13 short範圍-32768到32767 我覺得應該是很靠32767的一個值 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.249.232.13 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1435159855.A.A87.html

06/24 23:37, , 1F
32767=b0111111111111111喔
06/24 23:37, 1F

06/24 23:37, , 2F
補數可把第一個bit當做sign bit, 1代表負 0代表正
06/24 23:37, 2F

06/24 23:40, , 3F
況且那串不會很靠近32767,2^15就32768,後面還一串
06/24 23:40, 3F

06/24 23:45, , 4F
32767為何是0111111111111111阿? 有什麼規則定的嗎?
06/24 23:45, 4F

06/24 23:47, , 5F
我剛算了一下 這樣就是-13 頭怎不是從000000000000000
06/24 23:47, 5F

06/24 23:47, , 6F
開始呢
06/24 23:47, 6F

06/24 23:47, , 7F
你知道二進位怎麼做的嗎? 位值記數法?
06/24 23:47, 7F

06/24 23:49, , 8F
不知道 剛看不久而已
06/24 23:49, 8F

06/24 23:51, , 9F
那你先把位值記數法跟二進位搞懂後再來看補數...
06/24 23:51, 9F

06/24 23:56, , 10F
我不懂你說的是什麼? google找不太到,如果是計算轉換
06/24 23:56, 10F

06/24 23:58, , 11F
我會。
06/24 23:58, 11F

06/25 00:05, , 12F
你會轉換怎麼會不知道為何32767=b0111111111111111
06/25 00:05, 12F

06/25 00:07, , 13F
簡而言之 二補數不用想太多 最左邊的bit若是1該數
06/25 00:07, 13F

06/25 00:07, , 14F
就是負的,若是0該數就是零或正的
06/25 00:07, 14F

06/25 00:09, , 15F
若是正數或零就跟一般二進位一樣換算即可
06/25 00:09, 15F

06/25 00:10, , 16F
負數請先NOT過後加1就會得到相對應的二進位值
06/25 00:10, 16F

06/25 00:10, , 17F
換算該值後在前面加上一個減號就是你要的數字了
06/25 00:10, 17F

06/25 00:12, , 18F
正數轉負數也是NOT過後+1
06/25 00:12, 18F

06/25 00:14, , 19F
我知道我哪裡弄錯了,你還告訴我另一個東西。謝謝
06/25 00:14, 19F
文章代碼(AID): #1LYiqlg7 (C_and_CPP)
文章代碼(AID): #1LYiqlg7 (C_and_CPP)