用移位實現乘除法運算
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程式編寫系統程式的基礎
移位,邏輯運算實現加法,乘法和除法
1 用邏輯運算實現加法 兩個正整數相加,如果使用移位操作符和邏輯運算 與 運算,適用於對應位相同的加法,如x 3 0011 y 3 0011 則x y 0011 x y 2 異或運算,適用於對應位不同的加法,如x 3 0011 y 3 則x y 0 故 對於二進位制加法 類似每一位的異或運算結果,只...
利用移位和減法的除法演算法
楊季文 80x86組合語言程式 p352,子程式 divx 使用移位和減法進行除法運算,嘗試舉例驗證之。程式如下 子程式名 divx 功 能 64 位數除以32 位數,商用64 位表示 入口引數 edx eax 被除數 ebx 除數 出口引數 edx eax 商 ebx 餘數 divx proc n...
除法運算就是移位和相減
2進製完成除法運算就是移位和相減,比如1011011除以1110順序如下 1 1110 不夠減,結果添0,1左移一位再加上原來1後的0,為10 10 1110 不夠減,結果添0,10左移一位再加上原來10後的1,為101 101 1110 不夠減,結果添0,101左移一位再加上原來101後的1,為1...