继夫的玩弄H辣文的小说|女人与拘性猛交视频|精品欧美高清不卡高清|一起做亏亏的事情的视频|啦啦啦在线视频观看|望月直播下载ios版本|国产日韩欧美一区二区三区

C語言編程之二進制原碼、反碼和補碼

概述
在計算機內 , 有符號數有3種表示法:原碼、反碼和補碼 。
【C語言編程之二進制原碼、反碼和補碼】在計算機中,數據是以補碼的形式存儲的,所以補碼在c語言的教學中有比較重要的地位,而講解補碼必須涉及到原碼、反碼 。
詳細釋義
所謂原碼就是二進制定點表示法,即最高位為符號位 , “0”表示正,“1”表示負,其余位表示數值的大小 。
反碼表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外 。
補碼表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1 。
原碼、反碼和補碼的表示方法
定點整數表示法
定點小數小時法
反碼
正數:正數的反碼與原碼相同 。
負數:負數的反碼,符號位為“1”,數值部分按位取反 。
例如: 符號位 數值位
[+7]反= 0B
[-7]反= 1B
注意:
a. 數0的反碼也有兩種形式考勤系統的c語言源代碼,即
[+0]反=
[- 0]反=
b. 8位二進制反碼的表示范圍:-127~+127
原碼
在數值前直接加一符號位的表示法 。
例如: 符號位 數值位
[+7]原= 0B
[-7]原= 1B
注意:
[+0]原=
[-0]原=
補碼
1)模的概念:把一個計量單位稱之為模或模數 。
例如 , 時鐘是以12進制進行計數循環的 , 即以12為模 。在時鐘上 , 時針加上(正撥)12的整數位或減去(反撥)12的整數位,時針的位置不變 。
對于一個模數為12的循環系統來說,加2和減10的效果是一樣的;因此,在以12為模的系統中,凡是減10的運算都可以用加2來代替,這就把減法問題轉化成加法問題了(注:計算機的硬件結構中只有加法器,所以大部分的運算都必須最終轉換為加法) 。
10和2對模12而言互為補數 。
同理 , 計算機的運算部件與寄存器都有一定字長的限制(假設字長為8) , 因此它的運算也是一種模運算 。當計數器計滿8位也就是256個數后會產生溢出,又從頭開始計數 。產生溢出的量就是計數器的模,顯然 , 8位二進制數,它的模數為2^8=256 。在計算中,兩個互補的數稱為“補碼” 。
2)補碼的表示:
正數:正數的補碼和原碼相同 。
負數:負數的補碼則是符號位為“1” 。并且,這個“1”既是符號位,也是數值位 。數值部分按位取反后再在末位(最低位)加1 。也就是“反碼+1” 。
例如: 符號位 數值位
[+7]補= 0B
[-7]補= 1B
補碼在微型機中是一種重要的編碼形式,請注意:
a. 采用補碼后,可以方便地將減法運算轉化成加法運算 , 運算過程得到簡化 。
正數的補碼即是它所表示的數的真值,而負數的補碼的數值部份卻不是它所表示的數的真值 。
采用補碼進行運算,所得結果仍為補碼 。
b. 與原碼、反碼不同 , 數值0的補碼只有一個,即
[0]補= 。
若字長為8位,則補碼所表示的范圍為-128~+127;進行補碼運算時 , 應注意所得結果不應超過補碼所能表示數的范圍 。
原碼、反碼和補碼之間的轉換
由于正數的原碼、補碼、反碼表示方法均相同,不需轉換 。
在此,僅以負數情況分析 。
(1) 已知原碼,求補碼 。
例:已知某數X的原碼為,試求X的補碼和反碼
解:由[X]原=知,X為負數 。求其反碼時 , 符號位不變,數值部分按位求反;求其補碼時,再在其反碼的末位加1 。
1 0 1 1 0 1 0 0 原碼
1 1 0 0 1 0 1 1 反碼,符號位不變,數值位取反
1 1 0 0 1 1 0 0 補碼,符號位不變 , 數值位取反+1
故:[X]補=,[X]反= 。
(2) 已知補碼,求原碼 。
分析:按照求負數補碼的逆過程,數值部分應是最低位減1考勤系統的c語言源代碼,然后取反 。但是對二進制數來說,先減1后取反和先取反后加1得到的結果是一樣的,故仍可采用取反加1 有方法 。
例:已知某數X的補碼,試求其原碼 。
解:由[X]補=知,X為負數 。
1 1 1 0 1 1 1 0 補碼
1 1 1 0 1 1 0 1 反碼(符號位不變,數值位取反加1)
1 0 0 1 0 0 1 0 原碼(符號位不變,數值位取反)
關于補碼的補充例子:
一個正的整數的補碼就是這個整數變成二進制的值 。
舉例:一個int型變量i=10,其二進制補碼就是0 0 0000 1010()
2. 一個負整數的二進制補碼 , 就是該負數的絕對值所對應的補碼全部取反后加1.
舉例:int i=-10的補碼如何求得:
3. +0和-0的二進制補碼都是0
原碼和反碼在數值0都有二意,唯有補碼在數值0是唯一的碼值!
本文到此結束,希望對大家有所幫助 。