【轉(zhuǎn)】-1的二進制表示

為什么
while(~scanf())
等效于
while(scanf()!=EOF)
看懂就知道了假哎。

我們已經(jīng)知道計算機中瞬捕,所有數(shù)據(jù)最終都是使用二進制數(shù)表達。
我們也已經(jīng)學(xué)會如何將一個10進制數(shù)如何轉(zhuǎn)換為二進制數(shù)舵抹。
不過肪虎,我們?nèi)匀粵]有學(xué)習(xí)一個負數(shù)如何用二進制表達。
 
比如惧蛹,假設(shè)有一 int 類型的數(shù)扇救,值為5,那么香嗓,我們知道它在計算機中表示為:
00000000 00000000 00000000 00000101
5轉(zhuǎn)換成二制是101迅腔,不過int類型的數(shù)占用4字節(jié)(32位),所以前面填了一堆0靠娱。
現(xiàn)在想知道沧烈,-5在計算機中如何表示?
 
在計算機中像云,負數(shù)以其正值的補碼形式表達锌雀。
什么叫補碼呢?這得從原碼迅诬,反碼說起腋逆。
 
原碼:一個整數(shù),按照絕對值大小轉(zhuǎn)換成的二進制數(shù)侈贷,稱為原碼惩歉。
比如 00000000 00000000 00000000 00000101 是 5的 原碼。
 
反碼:將二進制數(shù)按位取反俏蛮,所得的新二進制數(shù)稱為原二進制數(shù)的反碼撑蚌。
取反操作指:原為1,得0嫁蛇;原為0锨并,得1。(1變0; 0變1)
比如:將00000000 00000000 00000000 00000101每一位取反睬棚,得11111111 11111111 11111111 11111010。
稱:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反碼。
反碼是相互的抑党,所以也可稱:
11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互為反碼包警。
 
補碼:反碼加1稱為補碼。
也就是說底靠,要得到一個數(shù)的補碼害晦,先得到反碼,然后將反碼加上1暑中,所得數(shù)稱為補碼壹瘟。
比如:00000000 00000000 00000000 00000101 的反碼是:11111111 11111111 11111111 11111010。
那么鳄逾,補碼為:
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011

所以稻轨,-5 在計算機中表達為:11111111 11111111 11111111 11111011。轉(zhuǎn)換為十六進制:0xFFFFFFFB雕凹。

再舉一例殴俱,我們來看整數(shù)-1在計算機中如何表示。
假設(shè)這也是一個int類型枚抵,那么:

1线欲、先取1的原碼:00000000 00000000 00000000 00000001
2、得反碼: 11111111 11111111 11111111 11111110
3汽摹、得補碼: 11111111 11111111 11111111 11111111

可見李丰,-1在計算機里用二進制表達就是全1。16進制為:0xFFFFFF
請定義一個宏逼泣,比較兩個數(shù)a嫌套、b的大小,不能使用大于圾旨、小于踱讨、if語句。
一看到這種不能用乘除砍的、if等常規(guī)方法痹筛。那我們就要想到位運算;
在計算機中常用的就是與廓鞠、或帚稠、非、異或床佳、左移滋早、右移運算等。
右移的情況比較復(fù)雜砌们,假如是無符號數(shù)杆麸,那么右移搁进,左邊空出的位補0;
假如是有符號負數(shù)(正數(shù))昔头,那么右移饼问,左邊會補1(補0);
所以建議使用左移揭斧;
a和b相減莱革,如果結(jié)果大于0,最高位為0讹开;否則盅视,為負數(shù)最高位為1;
因為 在計算機中是使用補碼存儲的旦万;下面的1<<31位闹击,就是用1去與上最高位; */

define cmp(a,b) (((a)-(b))&(1<<31))==1?-1:1;

//也可以這樣寫

define cmp(a,b) (((a)-(b))&(0x80000000))==1?-1:1;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纸型,一起剝皮案震驚了整個濱河市拇砰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狰腌,老刑警劉巖除破,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異琼腔,居然都是意外死亡瑰枫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門丹莲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來光坝,“玉大人,你說我怎么就攤上這事甥材《⒘恚” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵洲赵,是天一觀的道長鸳惯。 經(jīng)常有香客問我,道長叠萍,這世上最難降的妖魔是什么芝发? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮苛谷,結(jié)果婚禮上辅鲸,老公的妹妹穿的比我還像新娘。我一直安慰自己腹殿,他們只是感情好独悴,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布例书。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上料身,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天先紫,我揣著相機與錄音,去河邊找鬼暂幼。 笑死筏勒,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旺嬉。 我是一名探鬼主播管行,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼邪媳!你這毒婦竟也來了捐顷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤雨效,失蹤者是張志新(化名)和其女友劉穎迅涮,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體徽龟,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡叮姑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了据悔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片传透。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖极颓,靈堂內(nèi)的尸體忽然破棺而出朱盐,到底是詐尸還是另有隱情,我是刑警寧澤菠隆,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布兵琳,位于F島的核電站,受9級特大地震影響浸赫,放射性物質(zhì)發(fā)生泄漏闰围。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一既峡、第九天 我趴在偏房一處隱蔽的房頂上張望羡榴。 院中可真熱鬧,春花似錦运敢、人聲如沸校仑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迄沫。三九已至稻扬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間羊瘩,已是汗流浹背泰佳。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尘吗,地道東北人逝她。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像睬捶,于是被迫代替她去往敵國和親黔宛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 我們已經(jīng)知道計算機中擒贸,所有數(shù)據(jù)最終都是使用二進制數(shù)表達臀晃。我們也已經(jīng)學(xué)會如何將一個10進制數(shù)如何轉(zhuǎn)換為二進制數(shù)以及如...
    FantJ閱讀 36,913評論 9 29
  • 假設(shè)有一個 int 類型的數(shù),值為5介劫,那么徽惋,我們知道它在計算機中表示為:00000000 00000000 000...
    子喻愛吃黃燜雞閱讀 492評論 0 0
  • 1.你自已決定是否需要有正負: 就像我們必須決定某個量使用整數(shù)還是實數(shù),使用多大的范圍數(shù)一樣蜕猫,我們必須自已決定某個...
    Xiho丶閱讀 2,074評論 0 2
  • 題目描述: 輸入一個整數(shù)寂曹,輸出該數(shù)二進制表示中1的個數(shù)。其中負數(shù)用補碼表示回右。 分析: 先復(fù)習(xí)幾個知識點: 補碼: ...
    夏臻Rock閱讀 1,275評論 0 1
  • 負數(shù)的二進制表示方法 假設(shè)有一個 int 類型的數(shù)隆圆,值為3,那么翔烁,我們知道它在計算機中表示為: 00000000 ...
    diveinljq閱讀 1,749評論 0 0