C 中的右移位操作符比乘法要快多少?

2021-10-08 14:13:16 字數 1279 閱讀 3840

都說c++中的右移(或左移)要比乘法(或除法)快,但是到底快多少呢,在網上並沒有找到合適的答案,於是就自己測試了一下。

生成乙個長度為1m的字串,然後每4個一組組成乙個整型,計算公式是:

data[i + 3] * 16777216 + data[i + 2] * 65536 + data[i * 4 + 1] * 256 + data[i * 4];

或者使用位移操作:

(data[i + 3] << 24) + (data[i + 2] << 16) + (data[i * 4 + 1] << 8) + data[i * 4];

然後做多次迴圈,res1和res2表示兩個結果,time1的時間表示得法time2的時間代表位移。

res1 == res2: ture, time1 = 643 ms, time2 = 607

res1 == res2: ture, time1 = 607 ms, time2 = 605

res1 == res2: ture, time1 = 605 ms, time2 = 605

res1 == res2: ture, time1 = 611 ms, time2 = 606

res1 == res2: ture, time1 = 614 ms, time2 = 602

res1 == res2: ture, time1 = 607 ms, time2 = 600

res1 == res2: ture, time1 = 606 ms, time2 = 601

res1 == res2: ture, time1 = 610 ms, time2 = 601

res1 == res2: ture, time1 = 638 ms, time2 = 595

res1 == res2: ture, time1 = 601 ms, time2 = 603

c++中的位操作和乘法操作效率可以相同。不過,這個結果很奇怪,有待進一步分析。

#include

#include

#include

using

namespace std;

long

getmilliseconds()

void

test()

intmain

(int argc,

char

*ar**)

return0;

}

C 移位操作符的使用

c 中的移位操作符有兩個,分別是向左移位 和向右移位 移位操作符屬於雙目運算子,包括目標物件和移位次數,例如 1 4 則表示將1這個資料物件向左移位8個bit,如果1是乙個int8 t型別的資料,那麼從二進位制的表示來看,00000001 經過移位後變成了00010000,對應的十進位制的值就是16...

c語言中移位操作符的試驗

c語言中有兩個移位操作符 左移位 它們可以將乙個值向左移和向右移。在左移位中,值最左邊的被丟棄,而右邊多出來的幾個空位由0補齊。而右移在操作符同樣,只是方向不同。一下例子以左移位操作符講解。猜想 1若是移位數為負數怎麼辦,移還是不移?例如a 5,看下面 實驗 1 include int main i...

C 中的操作符

c 的精彩世界還離不開其提供的豐富的操作符,按照運算元的個數,c 操作符可分為以下幾類 如果從操作符的作用來看,c 操作符可以分為賦值操作符,算術操作符,關係操作符,邏輯操作符,位操作符和其它操作符。1.賦值操作符 賦值操作符除基本的賦值操作符 之外還包括以下的組合賦值操作符 要注意的是,對於復合的...