問幾個關於左移運算子,右移運演算法,按位與,或,異或,按位取反運算問題

2021-04-21 09:42:24 字數 2656 閱讀 9910

1樓:聽不清啊

1,2:這是因為~x=-x-1

3:^是異或運算,兩個數的二進位制列豎式,相同的異或得0,不同的得1。

4:《是左移運算子,-1的補碼是全1,左移2位後就是111...1100,這補碼就表示為-4。

(取反、左移、按位與、按位異或、按位或)優先順序由高到低的順序排列

2樓:仁昌居士

(取反、左移、按位與、按位異或、按位或)優先順序由高到低的順序排列為專取反 > 左移 > 按位與 > 按位異屬或 > 按位或。

1、~:意思是按位取反,類似於非(!)的關係,取它的反面。

2、<<: 意思是左移,移動二進位制的位。

3、& : 意思是按位與,類似於與(&&)的關係,一假為假。

4、^:意思是按位異或,通俗地說就是相同為0,不同為1.5、|:意思是按位或,類似於或(||)的關係,一真為真。

3樓:章半仙

- -b就是按照你寫的這個順序(右移跟左移優先順序一樣不過你這裡沒寫)...

c語言中關於左移<<運算子的問題

4樓:可愛小爬爬

原因:第一個k<<1只是表示k左移一位,但是這個運算結果並沒有給k而是依舊儲存在計算機cpu中的運算器中,同時你是用%d將這個結果列印出來,用%d格式表示把這個結果看成了int型,即型別擴大為int型,k<<1相當於2*k,在int型中65534沒有出界,所以就是這個結果。

第二個j<<=1;等價於j=j<<1;你看運算的結果給了j,而j是short int型,所以此時j=1111111111111110(最後一位為補進的0),而short int 最多是16位,這樣它的最高位為1,所以是負數,這是個補碼,其原碼為-(1111111111111110-1)按位取反,即為-0000000000000010=-2,最後用%d列印出的就是這個結果

c語言中的位運算子中『按位取反』是怎麼運算的

5樓:非常可愛

使用~按位取反運算的時候,計算機會將運算元所對應的二進位制表示式的每一版

個位進行取反權計算,取反後所得到的值就是~按位取反的運算結果。

例如,假如計算機是32位的,接下來要計算~5的值,計算過程如下:

5 的二進位制表示式為:0000 0000 0000 0000 0000 0000 0000 0101

執行~運算,即~5後: 1111 1111 1111 1111 1111 1111 1111 1010,即結果為-6

以上過程沒有任何問題,但如果忘記了負數的二進位制表達方式,那麼就會對這個結果產生疑問,為什麼1111 1111 1111 1111 1111 1111 1111 1010表示-6,可能會以為它應該表示-10等等,所以,使用~按位取反的另一個關鍵就是理解1111 1111 1111 1111 1111 1111 1111 1010為什麼表示-6,也即理解負數的二進位制表達方式。

擴充套件資料

js取整

~是按位取反運算,~~是取反兩次

在這裡~~的作用是去掉小數部分

因為位運算的操作值要求是整數,其結果也是整數,所以經過位運算的都會自動變成整數

除了~~n 還可以用

n<<0

n>>0n|0

6樓:程式設計師的每一天

c語言經典例子之按位取反運算子

7樓:匿名使用者

位運算中的按位取

抄反操作,使襲用的運算子為~, 其計算原則為:

按照運算元的二進位制值,逐位計算,如果原始值為0,則結果該位上為1, 否則結果該位上為0。

比如char型別的0x78按位取反

~0x78

=~b0111 1000//轉為二進位制值。

=b1000 0111//按位取反。

=0x87

8樓:匿名使用者

~1010的反碼bai是0101

而負數在計

du算機中的表zhi示是用補碼dao,-11求補碼過程:1011取反->0100加1->0101

即專-11等價於~10

括號中的屬是0101

補充說明:是這樣的,1010在32位計算機中的儲存實際上是00001010,取反後是11110101,在計算機中首位是0表示正數,是1表示負數,即11110101表示的是一個負數,即要由11110101求這個負數,即求補碼的逆,步驟:先減1得11110100,再取反,取反時符號位不變,得10001011,即-11。

用4位表示的話可以填0101,或者是8位的11110101

9樓:匿名使用者

計算機儲存的數不是隻有4位的

像32位計算機,儲存int型別的數就用32位所以上面10的二進位制碼專1010,前面還有好屬多0,取反的時候要一起取反

簡單的話,以8位二進位制碼為例

括號中就是11110101,也就是00001010取反的結果這是補碼

-10的補碼是10的補碼(正數的補碼就是原碼)取反加1既然這裡只取反沒加1,所以就是-10-1=-11數轉補碼

正數就是二進位制碼

負數是相反數(即取絕對值)的二進位制碼取反加1補碼轉數

正數(二進位制最高位為0)直接轉

負數(二進位制最高位為1)減1取反轉成十進位制進位制數再加個負號

關於移位運算子的問題,Java移位運算子問題

右側的引數需要進行 模32的運算 這就是求 除以 32,所得到的餘數。那麼,35,除以 32,餘數,就是 3。因此,35,就和 3,等效。都是左移 3 位。都是,乘以 8。1 35,左側的 1,應該是指整型數,是 32 位的數字。一個數字,僅僅才 32 位,對其移位 35 位?超出了總位數,怎麼移?...

C遞增遞減運算子,求助關於遞增遞減運算子( , )過載的問題

對於int等整形來說,來大部分編譯自器都已經做bai過優化,i和i 效率沒差du別 而對於使用者自定義的 zhi型別,過載 運算dao符,type 或者 type 會先返回該型別的臨時複製物件,如果使用者不需要用到這個功能,就造成了無形中的效率降低 而 type 並不會進行復制臨時物件的步驟,所以說...

問一下java的運算子是做什麼運算的

都是位運算,第一個是逐位異或 比較兩個運算元對應的二進位制數,當兩個二進位制位均為1或0時,結果取0,否則取1 第二個是逐位與 比較兩個運算元對應的二進位制數,當兩個二進位制位均為1時,結果取1,否則取0 三位為逐位或 當兩個二進位制位均為0時,取0,否則取1 位運算子。搜尋一下就有很多相關知識了。...