運算子之位運算子

2021-10-09 04:45:43 字數 2734 閱讀 7921

>> 右移

負數》 無符號右移

| 或^ 異或

& 與~ 非

說明:位運算子都是作用在二進位製上的

比如 n = 50 ;

n << 1 結果是多少?100

n << 2 結果是多少? 200

n << 5 結果是多少? 1600

為什麼會是這樣的呢?

運算的邏輯如下:

1,n = 50;

2,n的二進位制是:0011 0010

3,0011 0010 左移一位 0110 0100;缺位補0或者1

4,然後再把0110 0100轉成十進位制結果為100

5,同理:<< 2,右移兩位,<<5,右移五位

敲黑板:

n << 1 == n * 21

n << 5 == n * 25

n << a == n * 2a

比如 n = 50 ;

n >> 1 結果是多少?25

n >> 2 結果是多少?12

n >> 5 結果是多少?1

為什麼會是這樣的呢?

運算的邏輯如下:

1,n=50;

2,n的二進位制是:0011 0010

3,0011 0010 右移一位 000110 01 缺位補0

4,然後再把000110 01轉成十進位制結果為25

5,同理:>> 2,右移兩位,>> 5,右移五位

敲黑板:

n >> 1 == n / 21

n >> 5 == n / 25

n >> a == n / 2a

注意:

n/2a 取整,這就是為什麼n >> 2 == 12,n >> 2 != 12.5

比如 n = -50 ;

n >> 1 結果是多少?-25

n >> 2 結果是多少?-13

n >> 5 結果是多少?-2

為什麼會是這樣的呢?

運算的邏輯如下:

1,首先要知道原碼、反碼和(補碼 = 反碼+1)

2,n = -50;

3,n的絕對值是 「50」

4,二進位制:0000 0000 0000 0000 0000 0000 0011 0010;

5,反碼是:1111 1111 1111 1111 1111 1111 1100 1101;

6,補碼是:1111 1111 1111 1111 1111 1111 1100 1110;

7,同理:>> 2,右移兩位,>> 5,右移五位,缺位補1

敲黑板:

n >> 1 == n / 21

n >> 5 == n / 25 -1

n >> a == n / 2a (-1)

注意:

n/2a 取整,如果有餘數則再減一,且最小值只能為-1 這就是為什麼 -50 >> 2 == -13,n >> 2 != -12

和 >> 一樣

比如 n = -50 ;

n >>> 1 結果是多少?2147483623

n >>> 2 結果是多少?1073741811

n >>> 5 結果是多少?134217726

為什麼會是這樣的呢?

運算的邏輯如下:

1,首先要知道原碼、反碼和(補碼 = 反碼+1)

2,n = -50;

3,n的絕對值是 「50」,

4,二進位制:0000 0000 0000 0000 0000 0000 0011 0010;

5,反碼是:1111 1111 1111 1111 1111 1111 1100 1101;

6,補碼是:1111 1111 1111 1111 1111 1111 1100 1110;

7,同理:>> 2,右移兩位,>> 5,右移五位,缺位補0

8,神奇的時候出來了,這個缺位補了0,這個數字就變成了正整數了,所以一下子就變得很大

敲黑板:

敲不出來了

注意:

第八點很重要

比如 3|5 = 7

1,3的二進位制:0011

2,5的二進位制:0101

3,計算方式:同為0時為0,否則為1

4,結果就是:0111

5,轉成十進位制就是:7

比如 3^5 = 6

1,3的二進位制:0011

2,5的二進位制:0101

3,計算方式:相同則為0,不相同則為1

4,結果就是:0110

5,轉成十進位制就是:6

比如 -3& -5 = -12

1,-3的二進位制:1111 1111 1111 1111 1111 1111 1111 1101

2,-10的二進位制:1111 1111 1111 1111 1111 1111 1111 0110

3,計算方式:同為1時為1,否則為0

4,結果就是:1111 1111 1111 1111 1111 1111 1111 0100

5,轉成十進位制就是:-12

比如 ~ -3 = 2

1,-3的二進位制:1111 1111 1111 1111 1111 1111 1111 1101

2,計算方式:0轉1,1轉0

3,~-3的二進位制:0000 0000 0000 0000 0000 0000 0000 0010

5,轉成十進位制就是:2

python運算子 之位運算子

支援的資料型別有數字 集合 set 僅支援 交集 並集 不同集 其他型別都不支援位運算。按位運算子是把數字看作二進位制來計算的。位運算子作用於所有的位上,並且按位運算。python中按位運算法則如下 假設a 60,b 13 操作符描述例項 按位與運算子,當且僅當兩個運算元的某一位都非0時,該位的結果...

位運算子,「,」逗號運算子,

位運算子有 按位與 按位或 按位異或 按位取反 優先順序從高到低,依次為 按位與運算有兩種典型用法,一是取乙個位串資訊的某幾位,如以下 擷取x的最低7位 x 0177。二是讓某變數保留某幾位,其餘位置0,如以下 讓x只保留最低6位 x x 077。按位或運算的典型用法是將乙個位串資訊的某幾位置為1。...

ECMAScript 運算子 位運算子

位運算子是在數字底層 即表示數字的 32 個數字 進行操作的 重溫整數 ecmascript 整數有兩種型別,即有符號整數 允許用正數和負數 和無符號整數 只允許用正數 在 ecmascript 中,所有整數字面量預設都是有符號整數,這意味著什麼呢?有符號整數使用 31 位表示整數的數值,用第 32...