1樓:做而論道
位運算?其實,也就是「邏輯運算」。
上過帶陪高中的,都明白這些。
學計算機的人,一般都沒有好好學習。他們弄不懂「邏輯運算」的意思,就自己編造乙個詞「位運逗行運算」。
其實也就是山樑:與、或、非、異或。
僅此而已,沒有什麼可詳解的。
位運算全解
2樓:世紀網路
位運算是以二進位為單位的運算,其運算元和運算結果都是整數值。
位與 x&y
位或 x|y
位非 ~x位異李州或 ^x
右移 x>>y
左移 x<>>無符號右移 x>>>y
除了^為一元其餘都為二元運算。
規定兩對應位都為1則為1,否則為0
規定兩對應位其中有1則為1,否則0
規定兩對應位相同則為1,不同為0
規定兩對應位按位求補。
將二進位數按指定左移幾位,移掉的省略,右邊缺失的位,用0補齊。
將二進位數按指定右移幾位,移掉的省略,左邊缺失的位,(該數是正數)用0補齊,(該數是負數)用1補齊。
將二進位數按指定右移幾位,移轎兄掉的省略,左邊缺失的位,用0補齊。
位運算口訣:
清零取反要用與,某位置一可用或。
若要取反和交換,輕輕鬆鬆用異或。
口訣好記,但是計算的時候得要十分有耐心,睜大你的眼,死死地盯著位數,位運算這貨就像高中時填寫的機讀卡。
位運算操作的優先順序比較低,如int a = 1《例子1 :a=15,b=6計算 a&b:
例子2: a=-6,b=-2,計算a&b:
首先得到6的二進位,00000110
負數的二進位需要該數正數按位取反+1
11111001 加1為 11111010
同理的-2的二進位 11111110
得到的11111010為負數,的到該正數需要-1按位取反。
計算過程:法則一:任何數左移(右移)32位的倍數等於該數本身。
法則二:在位移運算m《左移動1位,各位數計算都會乘以2;右移1位,各位數計算都會除以2。
所以x<>n,x除以2的n次方;
5<<3 5x2³=40
那麼問題又來了,-1>>>1是多少?
計算過程:竟然得到了int能表示的最大值。
使用位運算能神奇地解決日常中某些計算,就像你費了九牛二虎之力終於從乙個字串中過濾出了想要的內容,閉擾襲但是人家乙個正則匹配就粗來了,留下你記幾在冷風中沉思。
他說了句,low逼,還用這個,然後寫出了。
計算過程:記住任何數異或自己都為0;任何數異0都為本身;進行異或的數可以無序交換)
實現了a和b交換值。
位運算子如何理解
3樓:張三**
按位與運算子 "&是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。
9&5 = 1 可寫算式如下:
00001001 (9的二進位補碼) 00000101 (5的二進位補碼) 00000001 (1的二進位補碼)
a. 清零 s 特定位 (mask中特定位置0,其它位為1, s = s&mask )
b. 取某數 s 中指定位 (mask中特定位置1,其它位為0, s = s&mask )
按位或運算子 「|是雙目運算子。其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有乙個為1時,結果位就為1。參與運算的兩個數均以補碼出現。
9|5 = 13 可寫算式如下:
00001001|00000101 = 00001101(十進位為13)
對 s 特定位置1(mask中特定位置1,其它位為0, s=s|mask )
按位異或運算子 「^是雙目運算子。其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。參與運算數仍以補碼出現。
9^5 = 12 可寫成算式如下:
00001001^00000101 = 00001100 (十進位為12)
a. 使 s 特定位的值取反 (mask中特定位置1,其它位為0, s=s^mask )
b. 不引入第三變數,交換兩個變數的值 (設 a=a1,b=b1 )
求困早反運算子 ~ 為單目運算子,具有右結合性。 其功能是對參與運算的數的各二進位按位求反。
例如~9的運算為:
左移運算子 「《是雙目運算子。其功能把「《左邊的運算數的各二進位全部左移若干位,由「《右邊的數指定移動的位數, 高位丟棄,低位補0。 相當於其值乘以幾個2。
例如:a<<4 指把a的各二進位向左移動4位。即a*2*2*2*2,a乘以4個2
右移運算子 「>是雙目運算子。其功能是把「>>左邊的運算數的各二進位全部右移若干位,「>右邊的數指定移動的位數。相當汪察雀於其值除以幾個2,並只取整數。
例如:對於左邊移出的空位,如果是正數則空位補0,若為負數,可能補0或補1,這取決於所用沒戚的計算機系統。移入0的叫邏輯右移,移入1的叫算術右移,turbo c採用邏輯右移。
再看一例:
位運算子的運算規則
4樓:小豬仙女
位運算子的運算規則如下:
在c語言中有兩種意思,一種是取位址符,是單目運算子;另一種是位運算子,表示「按位與」,是雙目運算子。|:是位運算子,表示「按位或」。
資料擴充套件。1、符號 & 和 | 這兩個運算子都是二進位的按位操作符。
二進位「與」(都為1時,結果是1,否則是0。),比如:1010 & 1011 = 1010,1010 & 1000 = 1000。
二進位「或」(有1時,結果是1,都是0時,結果為0。),比如:1010 | 1011 = 1011,1010 | 1000 = 1010。
2、位運算子將數字視為二進位值,並按位進行相應運算,運算完成後再重新轉換為數字。
例如:表示式10&15表示(1010 & 1111),它將返回表示1010的值10。因為真真得真,或者是11得1,同位全是1結果也是1。
表示式10|15表示(1010 | 1111),它將返回表示1111的值15。假假得假。全零得零。
3、c語言中的符號分為10類:算術運算子、關係運算子、邏輯運算子、位操作運算子、賦值運算子、條件運算子、逗號運算子、指標運算子、求位元組數運算子和特殊運算子。<>
4、位操作運算子:參與運算的量,按二進位位進行運算。包括位與(&)位或(|)位非(~)位異或(^)左移(《右移(>>六種。
C語言中怎樣理解三目運算子條件運算子的右結合性
這裡涉及了c中的優先順序 結合性 求值順序。結合性只有在相同優先順序的運算子間才起作用,比如a b c,與 優先順序不同,這裡根本不用去管結合性。而a b c則需要進行結合性考慮了,如果 為左結合性,那麼應該理解為 a b c,如果 為右結合性,那麼應該理解為a b c 當然了,我們已經知道 為左結...
pascal中位運算子有哪些?是什麼意思
有shr,shl,and,or,xor.shr是將一個數在二進位制上右位移,如7 shr 1 3,即 111 右移 1 位,得11,為十進位制的3.shl是將一個數在二進位制上左位移,如7 shl 1 14,即 111 左移 1 位,得1110,為十進位制的14.and是將兩個數用二進位制的方法計算...
php有哪些運算子?php中賦值運算子有哪些
a選項,看下圖 不用全部記住,記住平時比較常用的就行了,還有記住 算術運算子 關係運算子 邏輯運算子 賦值運算子。php中賦值運算子有哪些 算數運算子,主要用於計算,例如,加 減 乘 除 取模。詳細的描述,如下圖所示 請點選輸入 描述。賦值運算子,主要用於給變數賦值,在php中,賦值運算子還有簡寫的...