一道簡單的機試題目引發的移位總結

2021-06-04 13:05:50 字數 1887 閱讀 4621

位是用來儲存一組項或條件的yes/no

資訊(有時又稱標誌)的簡潔方法。

位操作符使用整形的運算元。位操作符將其整形運算元視為二進位制位的集合,為每一位提供檢驗好設定的功能。

對於位操作符,由於系統不能確保如何處理其運算元的符號位,所以強烈建議使用unsigned整形運算元。

兩個資料,如果兩個相應的二進位都為1

,則該位的結果為

1,否則為0

作用:(1

)清零、 (2

)取乙個數中某些指定位 (3

)要想將哪一位保留下來,就與乙個數進行

&運算,此數在該位取

1兩個資料,如果兩個相應的二進位中只要有乙個為1

,則該位的結果為

1,否則為0

作用:(1

)如果想使乙個數a的低

4位改為

1,只需將a與

8進製數

017(

00001111

)進行按位或運算即可。

若參加運算的兩個二進位同號,則結果為0

,異號則為1

作用:(1

)使特定位翻轉(要使哪幾位翻轉就將其進行

^運算的該幾位置為

1即可)、 (2

)與0^

,保留原值、 (3

)交換2

個值,不用臨時變數(

a=a^b;b=b^a;a=a^b;

)取反即0

變1,1變0

高位左移後溢位,不起作用,右邊補0

左移n位,相當於該數乘以

移動到右端低位捨棄,高位補0

右移n位,相當於該數除以

步驟:(1

)先使a右移4

位  a>>4 (2

)設定乙個低

4位全為

1,其餘全為

0的數   

~(~0<<4)

步驟解析: 0:  0000...000000

~0:  1111...111111

~0<<4:  1111...110000

~(~0<<4):  0000...001111

(3)將上面二者進行&運算

a>>4 & ~(~0<<4)

#include using namespace std;

int _tmain(int argc, _tchar* argv)

執行結果:

分析:在32位的機子上,

int佔

4個位元組,每個位元組是8位。

0x      12          34           56          78

0000 0000    0000 0000    0000 0000    0000 0000

變化後:78          56           34          12

(1)ival>>24 把 ival向右移動24位,捨棄ival後邊的24位,由於乙個

16進製制能表示

4位,這樣就相當於取ival中的12將其放到最低位,即上面

78的位置

(2)(ival>>8) & 0xff00  其中ival>>8是把ival向右移動8位,相當於取ival中的123456,將其放到上面的

345678

位置,再與 0xff00取與運算相當於取123456中的

34,將其放到

56的位置

(3)同理,(ival<<8) & 0xff0000將取ival 中的56,將其放到

34的位置

(ival <

12的位置。

最後在將上面的去或運算:

0x    00 00 00 12

00 00 34 00

00 56 00 00

78 00 00 00

一道簡單的題目

這是校賽的一道題,當時覺得挺難,後來就覺得簡單,知道思路後就很好做了。題目是這樣子的 1008 植樹節b time limit 1 sec memory limit 128 mb submit 4 solved 4 submit status web board description 植樹節那天每...

一道簡單的題目

這是一道leetcode的題目,描述如下 given an unsorted integer array,find the first missing positive integer.for example,given 1,2,0 return 3,and 3,4,1,1 return 2.you...

一道簡單的acm題目

acm協會主席alphard決定在除夕夜辦一場山寨春晚,立即得到廣大acmer的支援。報名的acmer眾多,主席已經開始忙不過來了。幸好有 細心 的angelclover幫忙,把報名參加山寨春晚的節目單按照預演時間進行了歸類。alphard要求春晚不要超過4小時,但為了不打擊廣大acmer的積極性,...