進(jìn)制轉(zhuǎn)換以及位運(yùn)算

本文代碼演示采用的是golang語言

進(jìn)制

// 二進(jìn)制
// go不能直接輸出二進(jìn)制编振,可以使用 %b 格式化
// fmt %b   表示為二進(jìn)制
var n int = 5
fmt.Printf("%T %b\n", n, n) // 101

// 8進(jìn)制, 0-7
// 以數(shù)字0開頭表示
var n1 int = 011
fmt.Printf("%T %v\n", n1, n1) // 9

// 16進(jìn)制嚼酝,0-9A-F,
// 以0x或者0X開頭表示
var n2 int = 0x11
fmt.Printf("%T %v\n", n2, n2) // 17

其它進(jìn)制轉(zhuǎn)十進(jìn)制

  1. 十進(jìn)制數(shù)字計(jì)算

123 = 3 * 1 + 2 * 10 + 1 * 100

  1. 二進(jìn)制轉(zhuǎn)十進(jìn)制

從最低位開始枣申,將每個(gè)位上的數(shù)提取出來还棱,乘以2的位數(shù)-1次方撤摸,然后求和

1011 = 1 * 1 + 1 * 2 + 0 * 4 + 1 * 8 = 1 + 2 + 0 + 8 = 11

  1. 八進(jìn)制轉(zhuǎn)十進(jìn)制 同理

0123 = 3 * 1 + 2 * 8 + 1 * 64 = 3 + 16 + 64 = 83

  1. 十六進(jìn)制轉(zhuǎn)十進(jìn)制 同理

0x34A = 10 * 1 + 4 * 16 + 3 * 16 * 16 = 842

十進(jìn)制轉(zhuǎn)其它進(jìn)制

除K取余法温眉,K就是要轉(zhuǎn)換成的多少進(jìn)制

十進(jìn)制轉(zhuǎn)二進(jìn)制

規(guī)則: 將該數(shù)不斷除以2缸匪,知道商為0為止,然后將每步得到的余數(shù)倒過來类溢,就是對(duì)應(yīng)的二進(jìn)制

二進(jìn)制轉(zhuǎn)八進(jìn)制

規(guī)則: 將二進(jìn)制數(shù)每三位一組(從低位開始組合)凌蔬,轉(zhuǎn)成對(duì)應(yīng)的八進(jìn)制數(shù)即可。

二進(jìn)制的三位最多表示0-7

二進(jìn)制: 11010101

八進(jìn)制: 0325

二進(jìn)制轉(zhuǎn)十六進(jìn)制

規(guī)則: 將二進(jìn)制數(shù)每四位一組(從低位開始組合)闯冷,轉(zhuǎn)成對(duì)應(yīng)的十六進(jìn)制即可砂心。

二進(jìn)制的三位最多表示0-15

二進(jìn)制: 11010101

十六進(jìn)制: 0XD5

八進(jìn)制轉(zhuǎn)二進(jìn)制

規(guī)則: 將八進(jìn)制數(shù)每一位,轉(zhuǎn)成對(duì)應(yīng)的一個(gè)三位的二進(jìn)制數(shù)即可

八進(jìn)制:0237

二進(jìn)制:10011111

十六進(jìn)制轉(zhuǎn)二進(jìn)制

規(guī)則: 將十六進(jìn)制數(shù)每一位蛇耀,轉(zhuǎn)成對(duì)應(yīng)的一個(gè)四位的二進(jìn)制數(shù)即可

十六進(jìn)制:0237

二進(jìn)制:1000110111

接下來講解原碼補(bǔ)碼反碼以及位運(yùn)算

原碼反碼補(bǔ)碼(二進(jìn)制)

原碼:最高位是符號(hào)位辩诞,其它位取絕對(duì)值即可

反碼:

  • 正數(shù):反碼和原碼相同
  • 負(fù)數(shù):符號(hào)位一定是1,其余位對(duì)原碼取反纺涤。

補(bǔ)碼:

  • 正數(shù):補(bǔ)碼和原碼相同
  • 負(fù)數(shù):符號(hào)位一定是1译暂,反碼 + 1。

0的反碼補(bǔ)碼都是0

計(jì)算機(jī)運(yùn)算的時(shí)候撩炊,都是以補(bǔ)碼的方式來運(yùn)算的

位運(yùn)算

與運(yùn)算(and 外永、&)

兩個(gè)都為1,結(jié)果位1

2 & 3
2的補(bǔ)碼: 0000 0010
3的補(bǔ)碼: 0000 0011
--------------------- 2 & 3
2 & 3   = 0000 0010 = 2

或運(yùn)算(or拧咳、 |)

只要有一個(gè)為1伯顶,結(jié)果為1

2 | 3
2的補(bǔ)碼: 0000 0010
3的補(bǔ)碼: 0000 0011
--------------------- 2 | 3
2 | 3   = 0000 0011 = 3

異或運(yùn)算(XOR 或 EOR、^)

不相同就是1

XOR它指的是邏輯運(yùn)算中的“異或運(yùn)算”。兩個(gè)值相同時(shí)砾淌,返回false啦撮,否則返回 true,用來判斷兩個(gè)值是否不同汪厨。

JavaScript語言的二進(jìn)制運(yùn)算赃春,有一個(gè)專門的 XOR 運(yùn)算符,寫作^劫乱。
關(guān)于異或運(yùn)算有下面幾個(gè)規(guī)律

1^1=0;
1^0=1;
0^1=1;
0^0=0;

也就說0和1異或的時(shí)候相同的異或結(jié)果為0织中,不同的異或結(jié)果為1,根據(jù)上面的規(guī)律我們得到如下結(jié)論

a^a=0衷戈;      // 自己和自己異或等于0
a^0=a狭吼;      // 任何數(shù)字和0異或還等于他自己
a^b^c=a^c^b;// 異或運(yùn)算具有交換律

又:aaa = a

XOR 運(yùn)算有一個(gè)特性:如果對(duì)一個(gè)值連續(xù)做兩次 XOR殖妇,會(huì)返回這個(gè)值本身刁笙。這也是其可以用于信息加密的根本。

2 ^ 3
2的補(bǔ)碼: 0000 0010
3的補(bǔ)碼: 0000 0011
--------------------- 2 ^ 3
2 ^ 3   = 0000 0001 = 1

負(fù)數(shù)的異或運(yùn)算

-2 ^ 2
-2的原碼: 0000 0010
-2的反碼: 1111 1101
-2的補(bǔ)碼: 1111 1110
2的補(bǔ)碼:  0000 0010
--------------------- 2 ^ 3
-2 ^ 2   =  1111 1100  ====> 補(bǔ)碼谦趣,需要再轉(zhuǎn)成原碼
先換成反碼=補(bǔ)碼-1=1111 1011
原碼=1000 0100 = -4
最終結(jié)果-2 ^ 2 = -4
fmt.Printf("2&3=%v\n", 2&3)   // 2
fmt.Printf("2|3=%v\n", 2|3)   // 3
fmt.Printf("2^3=%v\n", 2^3)   // 1
fmt.Printf("-2^2=%v\n", -2^2) // -4

移位運(yùn)算

0000 0001    1
0000 0010    2
0000 0100    4
0000 1000    8

# 對(duì)于10進(jìn)制來說疲吸,左移就是*2,右移就是/2

# 左移  shl << 
# 所有二進(jìn)制位全部左移前鹅,高位丟棄摘悴,低位補(bǔ)0

# 右移  shr >>
# 所有二進(jìn)制位全部右移,低位丟棄舰绘,高位補(bǔ)0蹂喻,1(根據(jù)符號(hào)位決定)
a := 1 >> 2
b := 1 << 2
fmt.Printf("1 >> 2 = %v \n", a) // 0
fmt.Printf("1 << 2 = %v \n", b) // 4

計(jì)算機(jī)中的加法:

運(yùn)算流程圖展示如下:

計(jì)算機(jī)中只有加法運(yùn)算,其它的運(yùn)算也是通過加法實(shí)現(xiàn)的捂寿,只需要理解掌握加法運(yùn)算就可以了口四。


我是 甜點(diǎn)cc

熱愛前端開發(fā),也喜歡專研各種跟本職工作關(guān)系不大的技術(shù)者蠕,技術(shù)窃祝、產(chǎn)品興趣廣泛且濃厚。本號(hào)主要致力于分享個(gè)人經(jīng)驗(yàn)總結(jié)踱侣,希望可以給一小部分人一些微小幫助粪小。

希望能和大家一起努力營造一個(gè)良好的學(xué)習(xí)氛圍,為了個(gè)人和家庭抡句、為了我國的互聯(lián)網(wǎng)物聯(lián)網(wǎng)技術(shù)探膊、數(shù)字化轉(zhuǎn)型、數(shù)字經(jīng)濟(jì)發(fā)展做一點(diǎn)點(diǎn)貢獻(xiàn)待榔。數(shù)風(fēng)流人物還看中國逞壁、看今朝流济、看你我。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腌闯,一起剝皮案震驚了整個(gè)濱河市绳瘟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姿骏,老刑警劉巖糖声,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異分瘦,居然都是意外死亡蘸泻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門嘲玫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悦施,“玉大人,你說我怎么就攤上這事去团÷盏” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵渗勘,是天一觀的道長沐绒。 經(jīng)常有香客問我俩莽,道長旺坠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任扮超,我火速辦了婚禮取刃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘出刷。我一直安慰自己璧疗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布馁龟。 她就那樣靜靜地躺著崩侠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坷檩。 梳的紋絲不亂的頭發(fā)上却音,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音矢炼,去河邊找鬼系瓢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛句灌,可吹牛的內(nèi)容都是我干的夷陋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼骗绕!你這毒婦竟也來了藐窄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤酬土,失蹤者是張志新(化名)和其女友劉穎枷邪,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诺凡,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡东揣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腹泌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘶卧。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖凉袱,靈堂內(nèi)的尸體忽然破棺而出芥吟,到底是詐尸還是另有隱情,我是刑警寧澤专甩,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布钟鸵,位于F島的核電站,受9級(jí)特大地震影響涤躲,放射性物質(zhì)發(fā)生泄漏棺耍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一种樱、第九天 我趴在偏房一處隱蔽的房頂上張望蒙袍。 院中可真熱鬧,春花似錦嫩挤、人聲如沸害幅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽以现。三九已至,卻和暖如春约啊,著一層夾襖步出監(jiān)牢的瞬間邑遏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工棍苹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留无宿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓枢里,卻偏偏與公主長得像孽鸡,于是被迫代替她去往敵國和親蹂午。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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