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

时间:2009-04-01 10:09:18

标签: c

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

5 个答案:

答案 0 :(得分:19)

逐位使用<<操作者:

x = x << 1;

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

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

答案 1 :(得分:7)

左移。

But why would you want to do that?将这种优化留给编译器。

wikipedia上的运营商列表和大量示例。

答案 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;