什么是除以2的替代方案

时间:2014-08-08 17:54:38

标签: java c++

这是一个需要回答面试的问题,我只知道如何做到以下几点:

int x = y/2;

还有其他选择吗?

6 个答案:

答案 0 :(得分:11)

向右移1位:

int x = y >> 1;

答案 1 :(得分:3)

只是让面试官知道你是为了好玩:

int x = 0;
for(int i = 0; i < y; i += 2)
{
    x++;
}

当然,你需要为负数做一些额外的事情,但你得到了演练;)

答案 2 :(得分:1)

a << 1a * 2相同。 a >> 1a/2

相同

答案 3 :(得分:1)

正如Drakosha所说的向右移动1:

int x = y >> 1;

乘以0.5:

int x = (int)(y * 0.5);

减去乘以0.5的值:

int x = (int)(y - (y * 0.5));

答案 4 :(得分:0)

如果你不想使用位移,你甚至可以继续将数字减去2,直到你得到的余数小于2.保持计算你减去的次数。简单的数学。

答案 5 :(得分:0)

如上所述,您也可以按位移动数字。运营商是&gt;&gt;或&lt;&lt; 看看这个例子,应该让一切都清楚:

int x = 16;
x = x >> 1;
System.out.println(x); // prints 8