C C 中移位實現乘除法運算

2021-07-03 10:40:59 字數 1055 閱讀 5946

用移位實現乘除法運算

a=a*4;

b=b/4;

可以改為:

a=a<<2;

b=b>>2;

說明:

除2 = 右移1位               乘2 = 左移1位

除4 = 右移2位               乘4 = 左移2位

除8 = 右移3位               乘8 = 左移3位

...                                      ...

通常如果需要乘以或除以2的n次方都可以用移位的方法代替。

大部分的c編譯器,用移位的方法得到**比呼叫乘除法子程式生成的**效率高。

實際上,只要是乘以或除以乙個整數,均可以用移位的方法得到結果,如:

a=a*9

分析a*9可以拆分成a*(8+1)即a*8+a*1, 因此可以改為:    a=(a<<3)+a

a=a*7

分析a*7可以拆分成a*(8-1)即a*8-a*1, 因此可以改為:    a=(a<<3)-a

關於除法讀者可以類推, 此略.

迴圈移位差別於一般移位的是移位時沒有數字的丟失。迴圈左移時,用從左邊移出的位填充字的右端,而迴圈右移時,用從右邊移出的位填充字的左側。這種情況在系統程式中時有使用,在一些控制程式中用得也不少。

設有資料說明:

a=01111011,迴圈左移2位 正確結果: 11101101

過程:b=a>>(8-2) 用來得到正常左移丟失的位和迴圈移位後其正確位置 b=00000001;

a=a<<2;左移 a=11101100

a=a|b; a=11101101

如果不是用中間變數 a=(a>>(8-2))|(a<<2)

總長度n(8 16 32)

迴圈左移n (a>>(n-n))|(a>>n)

迴圈右移n (a<<(n-n))|(a>>n)

c語言的位運算功能是其差別於其他大多數高階程式語言的特色之一,用他能方便實現一些特別功能,靈活掌控是用c程式編寫系統程式的基礎。

移位乘除法

移位實現的乘除法比直接乘除的效率高很多。用移位實現乘除法運算 a a 4 b b 4 可以改為 a a 2 b b 2 說明 除2 右移1位 乘2 左移1位 除4 右移2位 乘4 左移2位 除8 右移3位 乘8 左移3位 通常如果需要乘以或除以2的n次方,都可以用移位的方法代替。大部分的c編譯器,用...

移位實現的乘除法

移位實現的乘除法比直接乘除的效率高很多。用移位實現乘除法運算 a a 4 b b 4 可以改為 a a 2 b b 2 說明 除2 右移1位 乘2 左移1位 除4 右移2位 乘4 左移2位 除8 右移3位 乘8 左移3位 通常如果需要乘以或除以2的n次方,都可以用移位的方法代替。大部分的c編譯器,用...

C C 移位計算代替乘除運算

測試移位和乘除的比較,發現移位比乘除運算快乙個位數的速度,但是難點在於判斷是否是2的冪次級的數,如果不是還得通過 拆分到2的冪次 上分子的累和,然後通過移位得到2的次冪數這樣 下列 只是簡單的判斷是冪級數則移位運算,不是則正常計算,不是完全都是移位算,之後如果找到方法判斷更快在更新 c c 1 in...