(轉(zhuǎn))二進(jìn)制相關(guān)基礎(chǔ)

轉(zhuǎn)載:https://mp.weixin.qq.com/s?__biz=MzU2NjIzNDk5NQ==&mid=2247483797&idx=1&sn=18579f6a4e319b6adefc02520a59e2bc&scene=21#wechat_redirect

golang的基本數(shù)據(jù)類型-整型

種類
?有符號(負(fù)號)
?1. int8 int16 int32 int64

無符號(無符號)
?1. uint8 uint16 uint32 uint64

架構(gòu)特定(取決于系統(tǒng)位數(shù))
?1. int uint

類型別名
?1. Unicode字符rune類型等價int32
?2. byte等價uint8

特殊類型
?1. uintptr,無符號整型,
?2. 由系統(tǒng)決定占用位大小巴比,足夠存放指針即可沈矿,和C庫或者系統(tǒng)接口交互

取值范圍

具體類型 取值范圍 所占位數(shù)
int8 -128到127 8
uint8 0到255 8
int16 -32768到32767 16
uint16 0到65535 16
int32 -2147483648到2147483647 32
uint32 0到4294967295 32
int64 -9223372036854775808到9223372036854775807 64
uint64 0到18446744073709551615 64

備注:1字節(jié)=8位(1 byte = 8bit)

整數(shù)的表示

  • 原碼:第一位為符號位(0表示正數(shù)吱涉,1表示負(fù)數(shù))荞彼。

  • 反碼:符號位不動,原碼取反谣旁。

  • 負(fù)數(shù)補(bǔ)碼:符號位不動秦陋,反碼加1。

  • 正數(shù)補(bǔ)碼:和原碼相同导俘。

備注:補(bǔ)碼的好處:
* 使用補(bǔ)碼可以沒有任何歧義的表示0峦耘。
* 補(bǔ)碼可以很好的參與二進(jìn)制的運(yùn)算,補(bǔ)碼相加符號位參與運(yùn)算旅薄,這樣就簡單很多了辅髓。

補(bǔ)碼:

在計算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來表示(存儲)少梁。
主要原因:使用補(bǔ)碼洛口,可以將符號位和其它位統(tǒng)一處理;同時凯沪,減法也可按加法來處理第焰。另外,兩個用補(bǔ)
碼表示的數(shù)相加時妨马,如果最高位(符號位)有進(jìn)位挺举,則進(jìn)位被舍棄。
補(bǔ)碼與原碼的轉(zhuǎn)換過程幾乎是相同的烘跺。
數(shù)值的補(bǔ)碼表示也分兩種情況:
(1)正數(shù)的補(bǔ)碼:與原碼相同湘纵。
例如,+9的補(bǔ)碼是00001001液荸。
(2)負(fù)數(shù)的補(bǔ)碼:符號位為1瞻佛,其余位為該數(shù)絕對值的原碼按位取反;然后整個數(shù)加1娇钱。
例如伤柄,-7的補(bǔ)碼:因為是負(fù)數(shù),則符號位為“1”,整個為10000111文搂;其余7位為-7的絕對值+7的原碼
0000111按位取反為1111000适刀;再加1,所以-7的補(bǔ)碼是11111001煤蹭。
已知一個數(shù)的補(bǔ)碼笔喉,求原碼的操作分兩種情況:
(1)如果補(bǔ)碼的符號位為“0”取视,表示是一個正數(shù),所以補(bǔ)碼就是該數(shù)的原碼常挚。
(2)如果補(bǔ)碼的符號位為“1”作谭,表示是一個負(fù)數(shù),求原碼的操作可以是:符號位為1奄毡,其余各位取反折欠,然后再整個數(shù)加1。
例如吼过,已知一個補(bǔ)碼為11111001锐秦,則原碼是10000111(-7):因為符號位為“1”,表示是一個負(fù)數(shù)盗忱,所以該位不變酱床,仍為 “1”;其余7位1111001取反后為0000110趟佃;再加1扇谣,所以是10000111。

浮點型

主要為了表示小數(shù)
也可細(xì)分float32和float64兩種
float64提供比float32更高的精度

取值范圍

類型 最大值 最小非負(fù)數(shù)
float32 3.402823466385288598117041834516925440e+38 1.401298464324817070923729583289916131280e-45
float64 1.797693134862315708145274237317043567981e+308 4.940656458412465441765687928682213723651e-324

IEEE745單精度浮點格式共32位揖闸,包含三個構(gòu)成字段:23位小數(shù)f揍堕,8位偏置指數(shù)e料身,1位符號s汤纸。將這些字段連續(xù)存放在一個32位字里,并對其進(jìn)行編碼芹血。其中0:22位包含23位的小數(shù)f贮泞; 23:30位包含8位指數(shù)e;第31位包含符號s幔烛。


image.png

一個實數(shù)V在IEEE 754標(biāo)準(zhǔn)中可以用V=(-1)s×M×2E 的形式表示啃擦,說明如下:

  • 符號s(sign)決定實數(shù)是正數(shù)(s=0)還是負(fù)數(shù)(s=1),對數(shù)值0的符號位特殊處理饿悬。
  • 有效數(shù)字M(significand)是二進(jìn)制小數(shù)令蛉,M的取值范圍在1≤M<2或0≤M<1。
  • 指數(shù)E(exponent)是2的冪狡恬,它的作用是對浮點數(shù)加權(quán)珠叔。
符號位 指數(shù)位 小數(shù)位
1位 8位 23位

例如根據(jù)IEEE745,計算11000001000100000000000000000000的單精度浮點的值弟劲。

解題:

1 10000010 00100000000000000000000
符號位 指數(shù) 尾數(shù)由于指數(shù)不是全部為0 所以小數(shù)位附加1
1 10000010 1.00100000000000000000000
-1 2^(130-127) (2^0 + 2^-3)

結(jié)論:-1 * (2^0 + 2^-3) * 2^(130-127) =-9

同樣祷安,你也可以驗證一下十進(jìn)制浮點數(shù)0.1的二進(jìn)制形式是否正確,你會發(fā)現(xiàn)兔乞,0.1不能表示為有限個二進(jìn)制位汇鞭,因此在內(nèi)存中的表示是舍入(rounding)以后的結(jié)果凉唐,即 0x3dcccccd, 十進(jìn)制為0.100000001, 誤差0.000000001由此產(chǎn)生了霍骄。

進(jìn)制的概念

我們常用的進(jìn)制有二進(jìn)制台囱、八進(jìn)制、十進(jìn)制和十六進(jìn)制读整,十進(jìn)制是最主要的表達(dá)形式玄坦。

二進(jìn)制是0和1;八進(jìn)制是0-7绘沉;十進(jìn)制是0-9煎楣;十六進(jìn)制是0-9+A-F(大小寫均可)。

位運(yùn)算符

按位與(&)

兩位全為1车伞,結(jié)果才為1:

0&0=0择懂;
0&1=0;
1&0=0另玖;
1&1=1困曙;

用法:

  • 清零:如果想要一個單位清零,那么使其全部二進(jìn)制為0谦去,只要與一個各位都為零的數(shù)值想與慷丽,結(jié)果為零。

  • 取一個數(shù)中指定位:找一個數(shù)鳄哭,對應(yīng)X要取的位要糊,該數(shù)的對應(yīng)位為1,其余位為零妆丘,此數(shù)與X進(jìn)行“與運(yùn)算”可以得到X中的指定位锄俄。

例如:設(shè)X=1010 1110,取X的低4位勺拣,用X & 0000 1111 = 0000 1110 就可以得到奶赠。

按位或(|)

只要有一個為1,結(jié)果就為1:

0|0=0药有;
0|1=1毅戈;
1|0=1;
1|1=1愤惰;

用法:常用來對一個數(shù)據(jù)的某些位置1苇经;找到一個數(shù),對應(yīng)X要置1的位羊苟,該數(shù)的對應(yīng)位為1塑陵,其余位為零。此數(shù)與X相或可使X中的某些位置1蜡励。

例如:將X=1010 0000 的低四位置1令花,用X | 0000 1111 =1010 1111 就可以得到阻桅。

異或運(yùn)算(^)

兩個相應(yīng)位為“異”(值不同),則該位結(jié)果為1兼都,否則為0:

0^0=0嫂沉;
0^1=1;
1^0=1扮碧;
1^1=0趟章;

用法:

  • 使特定位翻轉(zhuǎn):找一個數(shù),對應(yīng)X要翻轉(zhuǎn)的各位慎王,該數(shù)的對應(yīng)位為1蚓土,其余位為零,此數(shù)與X對應(yīng)位異或就可以得到赖淤; 例如:X=1010 1110,使X低4位翻轉(zhuǎn)蜀漆,用X ^ 0000 1111 = 1010 0001就可以得到

  • 與0相異或,保留原值 例如:X ^ 0000 0000 = 1010 1110

  • 兩個變量交換值的方法: 1咱旱、借助第三個變量來實現(xiàn): C=A; A=B; B=C; 2确丢、 利用加減法實現(xiàn)兩個變量的交換:A=A+B; B=A-B;A=A-B; 3、用位異或運(yùn)算來實現(xiàn):利用一個數(shù)異或本身等于0和異或運(yùn)算符合交換律 例如:A = A ^ B; B = A ^ B; A = A ^ B;

取反運(yùn)算(~)

對于一個二進(jìn)制數(shù)按位取反吐限,即將0變1鲜侥,1變0: ~1=0; ~0=1;

左移運(yùn)算(<<)
  • 將一個運(yùn)算對象的各二進(jìn)制位全部左移若干位(左邊的二進(jìn)制丟棄,右邊補(bǔ)零) 2<<1 = 4 : 10 <<1 =100=4

  • 若左移時舍棄的高位不包括1诸典,則每左移一位描函,相當(dāng)于該數(shù)乘以2。 -14(二進(jìn)制:1111 0010)<< 2= (1100 1000) (高位包括1搂赋,不符合規(guī)則)

右移運(yùn)算(>>)(<<)

將一個數(shù)的各二進(jìn)制位全部右移若干位赘阀,正數(shù)左補(bǔ)0益缠,負(fù)數(shù)左補(bǔ)1脑奠,右邊丟棄。操作數(shù)每右移一位幅慌,相當(dāng)于該數(shù)除以2.

左補(bǔ)0 or 補(bǔ)1 得看被移數(shù)是正還是負(fù)宋欺。
例:4 >> 2 = 1
例:-14(1111 0010) >> 2 = -4 (1111 1100 )

無符號右移運(yùn)算(>>>)

各個位向右移指定的位數(shù)。右移后左邊突出的位用零來填充胰伍。移出右邊的位被丟棄
各個位向右移指定的位數(shù)齿诞。右移后左邊突出的位用零來填充。移出右邊的位被丟棄
例如: -14>>>2
即-14(1111 1111 1111 1111 1111 1111 1111 0010)>>> 2
=(0011 1111 1111 1111 1111 1111 1111 1100)
= 1073741820

說明:

  • 0x80000000是數(shù)的十六進(jìn)制表示骂租,轉(zhuǎn)成二進(jìn)制表示為10000000000000000000000000000000
  • 運(yùn)算的優(yōu)先級祷杈,移位運(yùn)算高于邏輯運(yùn)算,>>>高于&
  • 位邏輯與運(yùn)算 1&1 = 1 渗饮,0&1 = 0
  • '>>>'無符號右移但汞,移出部分舍棄宿刮,左邊位補(bǔ)0;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末私蕾,一起剝皮案震驚了整個濱河市僵缺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌踩叭,老刑警劉巖磕潮,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異容贝,居然都是意外死亡自脯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門斤富,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冤今,“玉大人,你說我怎么就攤上這事茂缚∠钒眨” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵脚囊,是天一觀的道長龟糕。 經(jīng)常有香客問我,道長悔耘,這世上最難降的妖魔是什么讲岁? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮衬以,結(jié)果婚禮上缓艳,老公的妹妹穿的比我還像新娘。我一直安慰自己看峻,他們只是感情好阶淘,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著互妓,像睡著了一般溪窒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冯勉,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天澈蚌,我揣著相機(jī)與錄音,去河邊找鬼灼狰。 笑死宛瞄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的交胚。 我是一名探鬼主播份汗,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼伐厌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了裸影?” 一聲冷哼從身側(cè)響起挣轨,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎轩猩,沒想到半個月后卷扮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡均践,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年晤锹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彤委。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鞭铆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出焦影,到底是詐尸還是另有隱情车遂,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布斯辰,位于F島的核電站舶担,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏彬呻。R本人自食惡果不足惜衣陶,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闸氮。 院中可真熱鬧剪况,春花似錦、人聲如沸蒲跨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽财骨。三九已至镐作,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間隆箩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工羔杨, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留捌臊,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓兜材,卻偏偏與公主長得像理澎,于是被迫代替她去往敵國和親逞力。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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