C C 位移與乘除法的換算

2021-07-02 06:38:01 字數 972 閱讀 5994

使用位移運算可以提高因乘除運算帶來的效率的問題,它的缺點是存在精度損失且不直觀。

乘法

12 * 2 = 12 << 1

12 * 4 = 12 << 2

12 * 8 = 12 << 3

12 * 16 = 12 << 4

12 * 32 = 12 << 5

12 * 64 = 12 << 6

12 * 128 = 12 << 7

12 * 256 = 12 << 8

除法

12 / 2 = 12 >> 1

12 / 4 = 12 >> 2

12 / 8 = 12 >> 3

12 / 16 = 12 >> 4

12 / 32 = 12 >> 5

12 / 64 = 12 >> 6

12 / 128 = 12 >> 7

12 / 256 = 12 >> 8

使用移位運算來避免乘法運算是一種常用技巧,不過乘數必須都是正整數,而且必須至少有乙個是 2 的 n 次方,例如:2,4,8,16,32……移位運算的特點是速度快,而乘法運算速度較慢,把乘法運算轉化為移位運算可以稍微提高程式執行效率。例如:

num *= 32;  

//等同於

num <<= 5; /* 2 的 5 次方等於 32 */

//如果乘數不是 2 的 n 次方,我們可以把乘數分解成幾個 2 的 n 次方的和:

num *= 20;

//等於

num *= (16 + 4);

//等於

num = num * 16 + num * 4;

//等於

num = (num << 4) + (num << 2);

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編譯器,用移位的方法得到 比呼叫乘除法子程式生成的...

web加減乘除法c C 實現簡單的加減乘除計算器

第一次學習c 做了個簡單的加減乘除計算器,只能實現兩個因數的運算。主要是練習下c 程式設計,和以前用過的vb差不多。與vb6不同的是,c 區分大小寫。windows視窗程式主要也是由一些控制項組成,響應響應的事件 event 實現具體的功能。1.效果圖如下所示 2.如下所示 using system...

移位實現的乘除法

移位實現的乘除法比直接乘除的效率高很多。用移位實現乘除法運算 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編譯器,用...