如何在不使用c中的算术运算符的情况下将给定数乘以2?

sev*_*jan 3 c

如何在不使用c语言的算术运算符的情况下将给定数字乘以2?

kgi*_*kis 19

使用bit wise <<运算符:

x = x << 1;
Run Code Online (Sandbox Code Playgroud)

这适用于整数和长数(不是浮点数).

它基本上将二进制内容向左移动一个位置,相当于乘以2


Bri*_*sen 7

左移.

但是你为什么要那样做呢?将这种优化留给编译器.

维基百科上的运营商列表和大量示例.

  • 在我的回答之后添加了这个标签,但即使对于家庭作业,最好指出这不是在高级语言中进行乘法的正确方法. (2认同)

Pet*_*son 6

只是为了扩展kgiannakakis帖子:

移位运算符的<<工作原理是因为它在二进制级别上移位 - 实际上在基数2中移动.正如将数字向左移动十进制(基数为10)与乘以10相同.例如:

23 (move to left one digit) = 230 = 23 * 10
Run Code Online (Sandbox Code Playgroud)

对于示例(使用前缀0b表示二进制数):

    3 * 2 = 6
0b11 << 1 = 0b110
Run Code Online (Sandbox Code Playgroud)

通过其他数字移位相当于乘以2'n'次,或乘以2到n次幂(2 ^ n)

   3 * 8 =    3 * 2^3    = 24
0b11 * 8 =   0b11 << 3   = 0b11000 (note the trailing zeros)
Run Code Online (Sandbox Code Playgroud)

并以十进制形式完成它的示例:

23 (move to left 3 places) = 23 * 1000 = 23 * 10^3 = 23000
Run Code Online (Sandbox Code Playgroud)


Alp*_*neo 5

警告:移位可能对签名变量不起作用,

int x;
int tmp;

if (x < 0) {

   tmp = -x;
   tmp = tmp << 1;
   x = -tmp;
}
else {

   x = x << 1;
}
Run Code Online (Sandbox Code Playgroud)