如何在不使用c语言的算术运算符的情况下将给定数字乘以2?
使用bit wise <<运算符:
x = x << 1;
这适用于整数和长数(不是浮点数).
它基本上将二进制内容向左移动一个位置,相当于乘以2
左移.
但是你为什么要那样做呢?将这种优化留给编译器.
维基百科上的运营商列表和大量示例.
只是为了扩展kgiannakakis帖子:
移位运算符的<<
工作原理是因为它在二进制级别上移位 - 实际上在基数2中移动.正如将数字向左移动十进制(基数为10)与乘以10相同.例如:
23 (move to left one digit) = 230 = 23 * 10
对于示例(使用前缀0b表示二进制数):
3 * 2 = 6 0b11 << 1 = 0b110
通过其他数字移位相当于乘以2'n'次,或乘以2到n次幂(2 ^ n)
3 * 8 = 3 * 2^3 = 24 0b11 * 8 = 0b11 << 3 = 0b11000 (note the trailing zeros)
并以十进制形式完成它的示例:
23 (move to left 3 places) = 23 * 1000 = 23 * 10^3 = 23000
警告:移位可能对签名变量不起作用,
int x; int tmp; if (x < 0) { tmp = -x; tmp = tmp << 1; x = -tmp; } else { x = x << 1; }