久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

一文讀懂位運算

 520jefferson 2021-09-27

來源:https://cnblogs.com/heiz123/p/15337749.html

概述

在計算機程序中所有的數(shù)都是以二進制形式存儲的。位運算就是直接對整數(shù)在二進制進行計算操作,。作為一名程序員掌握位運算的基本使用是很重要的,,而對于算法程序員來說,位運算的靈活使用能夠更靈活高效的解決很多問題,。

位運算都有哪些

符號描述運算規(guī)則
&同為1時結(jié)果為1,,其它為0


^異或相同為0,不同為1
~取反0變1,,1變0
<<左移各位左移,,高位丟棄,低位補0
>>右移各位右移,,低位丟棄,,如果該數(shù)為正則高位補0;反之補1
>>>無符號右移又稱邏輯右移,,不管正負,,高位補0

運算符邏輯

按為與(&)

參加運算的兩個數(shù)按二進制進行與運算。

0&0=0
0&1=0
1&1=1

用途:

清零

任何數(shù)與0做與運算結(jié)果都為0,。

取指定位

比如要取一個數(shù)的低4位,,則只需使用該數(shù)與(0000 1111)做與運行,結(jié)果就是這個數(shù)的低4位的值,。

奇偶判斷

只要二進制的末尾為0則是偶數(shù),,為1則為奇數(shù)。因此可用 (x&1)==0判斷是否是偶數(shù),。

按位或(|)

參加運算的兩個數(shù)按二進制進行或運算,。

0|0=0
0|1=1
1|1=1

用途:

將某位設(shè)置為1

如X=0101,,需要將第2位設(shè)置為1,,結(jié)果變?yōu)?111,,則只需和(0010)進行或運算,0101|0010=0111,。

按位異或(^)

參加運算的兩個數(shù)按二進制進行異或運算,。

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

用途:

翻轉(zhuǎn)指定位

如要將X=0101 1010的低4位翻轉(zhuǎn)為0101,則只需和Y=0000 1111進行異或運行,,X^Y=0101 0101 ,。

交換兩數(shù)值

如X=0101,Y=0100,,需要將X和Y的值進行交換,。

x ^= y; // x= 0101 ^ 0100  = 0001
y ^= x; // y = 0100 ^ 0001 = 0101
x ^= y; // x = 0001 ^ 0101 = 0100

按位取反(~)

參加運算的1個數(shù)據(jù)各位值0變1,1變0.

~0101=1010

用途:

取反運算和用于快速獲得某個特定值,如獲取一個最低位為0其他位為1的數(shù),,則對1進行取反即可,,~1。

左移運算符(<<)

參與運算的1個數(shù)據(jù)各位左移,,高位丟棄,,低位補0。

0101 << 1 = 1010

如果左移的數(shù)最高位不等于1,,則相當于乘2,。

右移運算符(>>)

參與運算的1個數(shù)據(jù)各位右移,如果該數(shù)為正則高位補0,,反之補1,,低位丟棄。

0101 >> 1 = 0010

某數(shù)進行右移運算相當于除以2,。

無符號右移運算符(>>>)

又稱邏輯右移,,不管正負,高位補0,。

0101>>>1=0010

如負數(shù)-5進行右移操作,,結(jié)果如下。(-5的二進制表示為11111111111111111111111111111011)

11111111111111111111111111111011>>>1=01111111111111111111111111111101

注:負數(shù)的二進制表示形式為補碼,。

有哪些騷操作

技巧一

x & (x - 1) 用于消去x最后一位的1

應(yīng)用:檢測整數(shù)x是否是2的次冪

思路:2的次冪滿足以下條件:

  1. 大于0

  2. 只有1個位是1

則x & (x - 1)的結(jié)果如果等于0則表示x是2的次冪,。

技巧二

a ^ b ^ b = a

一個數(shù)據(jù)集合中,只有1個數(shù)字出現(xiàn)1次,,其他數(shù)字都出現(xiàn)兩次,,找出這個數(shù)。

思路:只需要將所有數(shù)據(jù)進行異或運算,,結(jié)果就是這個數(shù),。

一個數(shù)據(jù)集合中,,只有2個數(shù)字出現(xiàn)過1次,其他數(shù)字都出現(xiàn)過兩次,,找出這兩個數(shù),。

思路:假設(shè)這兩個數(shù)是X,Y,所有數(shù)字進行異或的結(jié)果就是X^Y,因為異或運算邏輯是相同為0,,不同為1,,則找出這個結(jié)果的二進制中等于1的位置,然后將所有數(shù)字按照該位是否為1分成兩部分,,那么X和Y會被分開,,然后分別做異或運算,結(jié)果便是X和Y.

小結(jié)

位運算在各大互聯(lián)網(wǎng)公司的面經(jīng)中經(jīng)常會出現(xiàn),,各種算法題中也高頻使用,,希望本文能讓你對位運算有一個初步的認識。

來都來了,,點個贊再走啦~

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多