如何在不使用c语言的算术运算符的情况下将给定数乘以2?
答案 0 :(得分:19)
逐位使用<<操作者:
x = x << 1;
这适用于整数和长数(不是浮点数)。
它基本上将二进制内容向左移动一个位置,相当于乘以2
答案 1 :(得分:7)
答案 2 :(得分:6)
仅限于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
答案 3 :(得分:5)
警告:转移可能对签名变量无效,
int x;
int tmp;
if (x < 0) {
tmp = -x;
tmp = tmp << 1;
x = -tmp;
}
else {
x = x << 1;
}
答案 4 :(得分:0)
只是为了确保我们都清楚,按照每个人的建议去做,按位向左移位(&lt;&lt;&lt;&lt;&lt;&lt;&lt;
每次向左移动时,你都会基本上乘以两倍。
int x;
int result;
x = 5;
// result = 10 (multiply by a factor of 2 or 2^1=2)
result = 5<<1;
//result = 20 (multiply by a factor of 4 or 2^2=4)
result = 5<<2;
//result = 40 (multiply by a factor of 8 or 2^3=8)
result = 5<<3;