日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

被程序员忽视的位运算

發(fā)布時(shí)間:2025/3/19 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 被程序员忽视的位运算 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  在博客園潛水好久了,今天興致高昂的想寫一篇博客,寫的內(nèi)容就是最近剛剛弄懂的關(guān)于位運(yùn)算的題目。可能對(duì)那些老鳥(niǎo)老說(shuō)這些是在基礎(chǔ)不過(guò)的東西了,但是我相信還是有很多的博客需要了解并掌握這個(gè)基礎(chǔ)的。

?

做題目前首先需要掌握的知識(shí):

~?????????? 取反運(yùn)算符,如果運(yùn)算位為1取反后則變?yōu)?,如果運(yùn)算為為0取反后則為1

&?????????? 與運(yùn)算符,當(dāng)運(yùn)算的兩個(gè)數(shù)同時(shí)為1時(shí),則與運(yùn)算的結(jié)果才為1,否則為0

|???????????? 或運(yùn)算符,當(dāng)運(yùn)算的兩個(gè)數(shù)只要有一個(gè)1時(shí),則或運(yùn)算的結(jié)果為1,否則為0.

^    異或運(yùn)算符,當(dāng)兩個(gè)運(yùn)算位不同時(shí)為1,相同時(shí)是0

>>????????? 右移運(yùn)算符

<<????????? 左移運(yùn)算符

?

在內(nèi)存中的運(yùn)算都是以補(bǔ)碼的形式存在的。

正數(shù)的原碼、反碼、補(bǔ)碼相同。

負(fù)數(shù)的原碼:最高為符號(hào)為0代表正、1代表負(fù)。后面的數(shù)為整數(shù)轉(zhuǎn)換后的二進(jìn)制數(shù)。

負(fù)數(shù)的反碼:除符號(hào)為以外的位進(jìn)行取反,1變?yōu)?,0變?yōu)?

負(fù)數(shù)的補(bǔ)碼:負(fù)數(shù)的反碼+1

?

這里舉個(gè)簡(jiǎn)單的負(fù)數(shù)的例子,這里以整數(shù)占4個(gè)字節(jié)為例:

整數(shù)-5

(-5)10 的原碼為:(10000000 00000000 00000000 00000101)2

(-5)10 的反碼為:(11111111 11111111 11111111 11111010)2

(-5)10 的補(bǔ)碼為:(11111111 11111111 11111111 11111011)2

?

算術(shù)右移:低位溢出,符號(hào)位不變,并用符號(hào)位補(bǔ)溢出的高位。

算術(shù)左右:符號(hào)位不變,低位補(bǔ)0

?

  基礎(chǔ)知識(shí)就這么點(diǎn)了。不過(guò)這里沒(méi)有必要死記,在一邊做題目的時(shí)候,一邊在看定義,這樣對(duì)于理解會(huì)很有幫助的。

題目1

~2????????

  因?yàn)?2為正數(shù),所以2的原碼等于2的反碼等于2的補(bǔ)碼

  因?yàn)橛?jì)算中的運(yùn)算都是以補(bǔ)碼的形式存在的。所以我們需要2的補(bǔ)碼為(00000000 00000000 00000000 00000010)2

  對(duì)2的補(bǔ)碼進(jìn)行取反運(yùn)算得到:         (11111111 11111111 11111111 11111101)2

  此時(shí)得到的結(jié)論為(~2)的補(bǔ)碼為       (11111111 11111111 11111111 11111101)2

  因?yàn)樽罡呶粸?,所以是負(fù)數(shù)看,負(fù)數(shù)的補(bǔ)碼等于負(fù)數(shù)的反碼+1

  所以又可以得到了(~2)的反碼為        (11111111 11111111 11111111 11111100)2

  根據(jù)反碼又可以得到(~2)的原碼為       (10000000 00000000 00000000 00000011)2

  最后我們把二進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù)-3.

  所以~2=-3

?????????????

?

題目2

2&3 2|3

  因?yàn)?、3都為正數(shù),所以2、3的原碼等于反碼等于補(bǔ)碼。

? ? ? 即(2)10的原碼、反碼、補(bǔ)碼為   ?     (00000000 00000000 00000000 00000010)2

? ? ? ? (3)10的原碼、反碼、補(bǔ)碼為   ?      (00000000 00000000 00000000 00000011)2

??????緊接著我們開(kāi)始與運(yùn)算

????????????????????                    00000000 00000000 00000000 00000010

?????????????                    ?& ? 00000000 00000000 00000000 00000011


?                         ? 00000000 00000000 00000000 00000010

?

  在接著我們開(kāi)始或運(yùn)算

????????????????????                    00000000 00000000 00000000 00000010

?????????????                    ?| ? ? ? 00000000 00000000 00000000 00000011


?                         ?00000000 00000000 00000000 00000011

  這與、或運(yùn)算的結(jié)果為補(bǔ)碼,我們還需要進(jìn)行轉(zhuǎn)化成原碼。

? ? ? 因?yàn)樽罡邽?(符號(hào)位),所以表示整數(shù)。

  即原碼等于反碼等于補(bǔ)碼。

  所以2&3的原碼用二進(jìn)制表示為        ?00000000 00000000 00000000 00000010

? ? ? 轉(zhuǎn)化成十進(jìn)制為2

  2|3的原碼用二進(jìn)制表示為          00000000 00000000 00000000 00000011

? ? ? 轉(zhuǎn)化成十進(jìn)制為3

?

題目3

13&7

  同樣我們可以從題目中知道13、7都是正數(shù),所以正數(shù)的原碼等于反碼等于補(bǔ)碼。

? ? ? 即(13)10的原碼等于反碼等于補(bǔ)碼為    (00000000 00000000 00000000 00001101)2

(7)10的原碼等于反碼等于補(bǔ)碼為        ?(00000000 00000000 00000000 00000111)2?

  最后我們?cè)谀X子里模擬在內(nèi)存中的運(yùn)算:

                        00000000 00000000 00000000 00001101

?????????????                  & ? ? ?00000000 00000000 00000000 00000111


?                       ? ?00000000 00000000 00000000 00000101

  從結(jié)果中我們可以看出補(bǔ)碼的最高位符號(hào)位為0表示正數(shù)。

  所以(13&7)10的原碼等于       (00000000 00000000 00000000 000000101)2

  轉(zhuǎn)化成十進(jìn)制數(shù)為5

?

題目4

5|4?????????

  同樣我們可以從題目中知道5、4都是正數(shù),所以正數(shù)的原碼等于反碼等于補(bǔ)碼。

? ? ? 即(5)10的原碼等于反碼等于補(bǔ)碼為    (00000000 00000000 00000000 00000101)2

  (4)10的原碼等于反碼等于補(bǔ)碼為     (00000000 00000000 00000000 00000100)2?

  最后我們?cè)谀X子里模擬在內(nèi)存中的運(yùn)算:

                        00000000 00000000 00000000 00000101

?????????????                    | ? 00000000 00000000 00000000 00000100


?                        00000000 00000000 00000000 00000101

  從結(jié)果中我們可以看出補(bǔ)碼的最高位符號(hào)位為0表示正數(shù)。

  所以(5|4)10的原碼等于       (00000000 00000000 00000000 000000101)2

  轉(zhuǎn)化成十進(jìn)制數(shù)為5

?

整數(shù)相對(duì)而言還是相對(duì)簡(jiǎn)單得,接著我們?cè)趤?lái)看幾個(gè)負(fù)數(shù)的題目。

題目5

(~-5)

  首先我們可以知道-5是負(fù)數(shù)

? ? ? 所以我們要先轉(zhuǎn)化成原碼

? ? ? (-5)10的原碼為         (10000000 00000000 00000000 00000101)2

? ? ? ?在轉(zhuǎn)化成為反碼

  (-5)10的反碼為          (11111111 11111111 11111111 11111010)2

  在轉(zhuǎn)化成為補(bǔ)碼

  (-5)10的補(bǔ)碼為          (11111111 11111111 11111111 11111011)2

? ? ? ?得到了補(bǔ)碼我們可以開(kāi)始取反運(yùn)算了:

? ? ? (~-5)10的補(bǔ)碼為       ? (00000000 00000000 00000000 00000100)2

? ? ? ?這里可以看到最高為符號(hào)位為0,所以表示的是整數(shù)。

? ? ? ?正數(shù)的原碼等于反碼等于補(bǔ)碼。

? ? ? ?所以(~-5)10的原碼為    ?  (00000000 00000000 00000000 00000100)2

? ? ? ?最后(~-5)=4

  

  

  緊接著我們來(lái)看左移運(yùn)算符和右移運(yùn)算符。

?題目6

-1>>2

  因?yàn)槭?1是負(fù)數(shù),所有我們先通過(guò)一系列的轉(zhuǎn)化得到他的補(bǔ)碼。

? ? ?(-1)10 的原碼為:    (10000000 00000000 00000000 00000001)2

  (-1)10 的反碼為:   ? ? (11111111 11111111 11111111 11111110)2

  (-1)10 的補(bǔ)碼為:    ?(11111111 11111111 11111111 11111111)2

? ? ? ? ?緊接著我們開(kāi)始右移運(yùn)算,溢出位用符號(hào)位來(lái)補(bǔ)。右移2位得到

  (-1>>2)10 的補(bǔ)碼為:  (11111111 11111111 11111111 11111111)2

? ? ? ?因?yàn)榉?hào)位為1,所以是負(fù)數(shù),我們接著算出反碼,原碼。

  (-1>>2)10 的反碼為:  (11111111 11111111 11111111 11111110)2

  (-1>>2)10 的原碼為:  (10000000 00000000 00000000 00000001)2

   所有-1>>2=-1

?

-1<<2

? ? ? 我直接用上面的到的

  (-1)10 的補(bǔ)碼為:     (11111111 11111111 11111111 11111111)2

? ? ? ?緊接著我們?cè)趯?duì)他進(jìn)行左移,低位用0補(bǔ)。左移兩位得到的結(jié)果是

  (-1<<2)10 的補(bǔ)碼為:   (11111111 11111111 11111111 11111100)2

  因?yàn)榉?hào)位為1,所以是負(fù)數(shù),我們接著算出反碼,原碼。

  (-1<<2)10 的反碼為:   (11111111 11111111 11111111 11111011)2

  (-1>>2)10 的原碼為:   (10000000 00000000 00000000 00000100)2

  所有-1<<2=-4

?

題目7

1>>2

  因?yàn)?是正數(shù),所有原碼等于反碼等于補(bǔ)碼,即

  (1)10 的原碼等于反碼等于補(bǔ)碼為 (00000000 00000000 00000000 00000001)2

  緊接著我們開(kāi)始右移運(yùn)算,

  (1>>2)10 的補(bǔ)碼為       (00000000 00000000 00000000 00000000)2

  因?yàn)榉?hào)位為0,所有原碼等于反碼等于

  補(bǔ)碼為              (00000000 00000000 00000000 00000000)2

  所有1>>2=0

?

1<<2

  因?yàn)?是正數(shù),所有原碼等于反碼等于補(bǔ)碼,即

  (1)10 的原碼等于反碼等于補(bǔ)碼為 (00000000 00000000 00000000 00000001)2

  緊接著我們開(kāi)始右移運(yùn)算,

  (1>>2)10 的補(bǔ)碼為       ?(00000000 00000000 00000000 00000100)2

  因?yàn)榉?hào)位為0,所有原碼等于反碼等于

  補(bǔ)碼為              (00000000 00000000 00000000 00000100)2

  所有1<<2=4

?

題目8

-3^3

?????? 首先-3的為負(fù)數(shù),所以

  (-3)10 的原碼為       (10000000 00000000 00000000 00000011)2

  (-3)10 的反碼為       (11111111 11111111 11111111 11111100)2

  (-3)10 的原碼為       (11111111 11111111 11111111 11111101)2

  在因?yàn)?為正數(shù)則

  (3)10 的原碼等于反碼等于補(bǔ)碼為 (00000000 00000000 00000000 00000011)2

  緊接著我們開(kāi)始異或運(yùn)算 

                   11111111 11111111 11111111 11111101

?????????????             ^????   00000000 00000000 00000000 00000011


?                   11111111 11111111 11111111 11111110

  (-3^3) 10 的補(bǔ)碼為    (11111111 11111111 11111111 11111110)2

  因?yàn)榉?hào)位為1,所有是負(fù)數(shù),所有

  (-3^3) 10 的反碼為    (11111111 11111111 11111111 11111101)2

  (-3^3) 10 的原碼為    (10000000 00000000 00000000 00000010)2

  所有(-3^3)=-2

?

?

  題目暫時(shí)就先這么多,因?yàn)槲覀円獙W(xué)會(huì)舉一反三的思想。當(dāng)然上面只不過(guò)是我們的理論知識(shí),但是我們程序員需要有一種用代碼檢驗(yàn)真理的思想,我這里檢驗(yàn)的代碼用的是php,因?yàn)樗恼投际怯蟹?hào)的。

下面附上php代碼

/*運(yùn)行環(huán)境Win7 64位旗艦版*服務(wù)器IIS7.5*代碼語(yǔ)言PHP*編寫日期2012-5-31*編寫人:JimmyWu* */<html><head><title>位運(yùn)算練習(xí)</title><meta http-equiv="content-type" content="text/html;charset=utf-8" /></head> <body><?phpecho '整形的長(zhǎng)度'.PHP_INT_SIZE.'<br />';//位運(yùn)算echo '~2='.(~2).'<br />';echo '2&3='.(2&3).'<br />';echo '2|3='.(2|3).'<br />';echo '~-5='.(~-5).'<br />';echo '13&7='.(13&7).'<br />';echo '5|4='.(5|4).'<br />';echo '-3^3='.(-3^3).'<br />';echo '-1>>2 = '.(-1>>2).'<br />';echo '1>>2 = '.(1>>2).'<br />';echo '-1<<2 = '.(-1<<2).'<br />';echo '1<<2 = '.(1<<2).'<br />';?> </body> </html>

  

  如果不對(duì)請(qǐng)指出并給我留言。最后歡迎關(guān)注我,也歡迎技術(shù)上的交流。

?

轉(zhuǎn)載于:https://www.cnblogs.com/Jimmy009/archive/2012/05/31/2528992.html

總結(jié)

以上是生活随笔為你收集整理的被程序员忽视的位运算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品无码久久久久久久久果冻 | 免费的黄色网 | 午夜精品久久久久久久第一页按摩 | 日韩免费一级片 | 人人草人 | 久久男女 | 亚洲一区 中文字幕 | 国产精品一区二区网站 | 一级特黄a大片免费 | 日本免费精品视频 | 国产三级精品在线观看 | 97色在线 | 日本特级黄色片 | 国产精品成人久久电影 | 人人妻人人藻人人爽欧美一区 | 欧美熟妇精品久久久久久 | 九九热视频精品在线观看 | 午夜精品久久久久久久无码 | xxxx视频在线观看 | 免费观看黄色的网站 | av免费在线观看网址 | 黄色国产在线播放 | 欧美高清大白屁股ass18 | 91麻豆精品国产午夜天堂 | 欧美日韩麻豆 | 国产又粗又猛又爽又黄的 | 男女交性视频 | 秘密基地动漫在线观看免费 | 亚州福利 | 免费国产一区二区 | 亚洲视频自拍 | 婷婷亚洲综合 | 被黑人猛躁10次高潮视频 | 18成人在线观看 | 秋霞啪啪片 | 国产一级精品毛片 | 国产精久久一区二区三区 | 天天干夜夜欢 | 日韩精品久久久久久久酒店 | 亚洲一区二区三区视频 | 免费精品视频一区二区三区 | 91久久久久| 国产九一精品 | 91涩| 91香蕉视频黄色 | 白石茉莉奈番号 | 国产免费看黄 | 欧美日韩一级二级三级 | 咪咪色在线视频 | 亚洲中文字幕无码av永久 | 人妻视频一区二区 | 欧美日韩成人在线观看 | aaa国产视频| 麻豆精品视频免费观看 | 我们的生活第五季在线观看免费 | 亚洲av无码专区在线 | 伊人久久大香线蕉成人综合网 | 欧美精选一区 | 亚洲天堂2020 | 亚洲熟妇一区二区三区 | 一级黄色在线观看 | 欧洲性生活片 | www黄色| 人妻aⅴ无码一区二区三区 阿v免费视频 | 三级黄色片免费观看 | 国产一区毛片 | 三级影片在线免费观看 | 人人看人人射 | 我要看免费的毛片 | 日韩成人综合 | 天天操夜夜操视频 | 九色国产在线 | a片在线免费观看 | 永久久久久久久 | 岛国av一区 | 国产美女又黄又爽又色视频免费 | 国产亚洲欧美日韩高清 | 密色av| 人人草人人射 | 一区二区三区视频在线免费观看 | 国产乱码精品一区二区三区中文 | 国产精品jizz在线观看无码 | 日韩精品四区 | 精品亚洲精品 | 中文久久乱码一区二区 | 91精品国产一区二区三区蜜臀 | 亚洲国产成人精品一区二区三区 | 欧美在线免费看 | 国产精品嫩草影院桃色 | 青草青在线 | 成人影视免费 | 男女日皮视频 | 麻豆app在线观看 | 日韩国产成人无码av毛片 | 日韩成人小视频 | 亚洲欧美另类激情 | 亚洲熟女乱色一区二区三区久久久 | 国产小视频自拍 | 日韩一区二区三区免费 |