教你理解位移

2021-07-03 08:29:46 字數 861 閱讀 6554

乙個很簡單問題:用什麼方式計算2*8最高效?

沒錯答案,就是2<<3,你肯定也是知道答案的。

但為什麼是2<<3不是2<<2也不是2<<4呢?

估計有不少人就發懵了。

以下就來講解一下位運算中的左移右移。

先看一下在10進製中對數字進行左右移操作:

目標數字:1

左移1位:10

左移2位:100

右移1位:0.1

右移2位:0.01

很明顯,乙個10進製的數左移多少位就乘以10的多少次方,右移多少位就除以10的多少次方。

再看一下2進製中對數字進行左右移操作:

目標數字:1

左移1位:10

左移2位:100

右移1位:0.1

右移2位:0.01

看到沒有,其實是和10進製是一樣的,只不過同樣的位移因為不同的進製導致數值的不同。

很明顯,乙個2進製的數左移多少位就乘以2的多少次方,右移多少位就除以2的多少次方。

根據以上規律可得出:

在r進製中,乙個數a左移b位,就等於a乘以r的b次方,公式:a << b=a*(r^b)。

在r進製中,乙個數a乘以另乙個數b,等於a左移b開r方根的次數(以r為底的b的對數 ),公式:a*b=a<< log r(b)。

在r進製中,乙個數a右移b位,就等於a除以r的b次方,公式:a >> b=a/(r^b)。

在r進製中,乙個數a除以另乙個數b,等於a右移b開r方根的次數(以r為底的b的對數 ),公式:a/b=a>>log r(b)。

現在請看2*8,因為a * b=a<< log r(b),所以2乘以8等於2左移3(3=8開2次方根的次數,以2為底的8的對數)。

乙個例子理解C 位移

來自 很多人覺得位移這東西很複雜,二進位制一堆0 1看不懂。其實很簡單。位移理解可能簡單一些 其實位移就是資料轉換成二進位制的左右移動 右移左補0,左移右補0,後面多出來的部分去掉。用乘除法去理解位移也可以 左位移 相當於乘 左移1位相當於乘2,左移2位相當於乘4,左移3位相當於乘8,左移4位相當於...

乙個例子理解C 位移

很多人提問,不知道c 位移,可能有些人在面試中也遇到過 其實很簡單。c 位移運算子 左移 右移 位移理解可能簡單一些 其實 就是資料轉換成二進位制的左右移動 右移左補0,左移右補0,後面多出來的部分去掉。用乘除法去理解位移也可以 左位移 相當於乘 左移1位相當於乘2,左移2位相當於乘4,左移3位相當...

iOS 位移列舉

之前,我們一般都採用c語言的方式定義列舉,這種列舉可以稱為普通的列舉。typedef enum directiontype 但是我們在檢視蘋果的sdk或者看一些第三方庫時會像下面這樣定義列舉。比如sdwebimage 中這樣定義列舉,這稱為位移列舉。下面我結合實際應用,說明一下 位移列舉 impor...