二進制最前端的1代表負數(shù),0代表正數(shù),符號位一般會占據最前端
比如1字節(jié)數(shù)的0可以表示為
[0000 0000]
1個字節(jié)大存儲數(shù)為
[0111 1111] 或 [1111 1111]
分別是2的8次方-1,即 255 和 -255
符號位占據了一個比特位
原碼反碼補碼的相互轉化正數(shù)的相互轉化原碼:符號位為0,其后將十進制轉化為二進制,得到的就是其原碼
反碼:與原碼相同
補碼:與原碼相同
負數(shù)的相互轉化 原碼:符號位為1,其后將十進制轉化為二進制,得到的就是其原碼
反碼:符號位不變,其余都進行取反,原先為1的變?yōu)?,原先為0的變?yōu)?
補碼:反碼+1
舉例
正數(shù) 1 --- [0000 0001]原 --- [0000 0001]反 --- [0000 0001]補
負數(shù) -1 --- [1000 0001]原 --- [1111 1110]反 --- [1111 1111]補
2.按位取反的具體邏輯得到新補碼后要注意符號位是什么,如果為1則繼續(xù)推演,如果為0,則得到的新補碼就是新原碼
步驟
對于得到新補碼逆向求出新原碼的過程
如果把負數(shù)原碼到補碼的過程當作通用的流程
那么原碼到反碼,先要保留符號位,然后再對原碼取反
最后反碼加1得到補碼
那么逆向過程 補碼 ->反碼->原碼
則為
補碼減一得到反碼
反碼再保留符號位得到原碼
舉例0的按位取反
1.得到補碼
[0000 0000]原碼
由于正數(shù)的原碼反碼補碼相同,則
[0000 0000]為補碼
2.對補碼取反,得到新的補碼
[0000 0000] 原先的補碼
[1111 1111]新補碼
3.逆向求原碼
補碼減一得到反碼
[1111 1110]新反碼
反碼取反得到原碼
則符號不變,其余取反
[1000 0001] 新原碼
根據計算器可看出來推演正確
-2的按位取反
1.得到原碼
[1000 0010] 原碼
得到反碼時符號位不變,其余取反
[1111 1101] 反碼
反碼加1得補碼
[1111 1110] 補碼
2.對補碼取反,得到新的原碼
[1111 1110] 原先的補碼
取反
[0000 0001] 新補碼
由于新補碼符號位為0,則其新原碼與其新補碼相同
[0000 0001] 新原碼
根據計算器可知演算過程正確
一些簡便按位取反的簡便計算取反的符號為’ ~ ’
1.一個數(shù)取反再取反便是他本身,例如 ~ ( ~ 100 ) = 100
2.負數(shù)的取反可由公式直接推得
公式 ~x=-(x+1)
例如~ (-100) = - (-100 + 1) = 99
也可以理解為負數(shù)的取反就是 負數(shù)的絕對值減1
即 ~ (100)= |-100| - 1 = 99
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
文章標題:c語言基礎難關:按位取反-創(chuàng)新互聯(lián)
文章起源:http://jinyejixie.com/article22/djedjc.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供微信小程序、虛擬主機、靜態(tài)網站、移動網站建設、自適應網站、服務器托管
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)