这是一个需要回答面试的问题,我只知道如何做到以下几点:
int x = y/2;
还有其他选择吗?
答案 0 :(得分:11)
向右移1位:
int x = y >> 1;
答案 1 :(得分:3)
只是让面试官知道你是为了好玩:
int x = 0;
for(int i = 0; i < y; i += 2)
{
x++;
}
当然,你需要为负数做一些额外的事情,但你得到了演练;)
答案 2 :(得分:1)
a << 1
与a * 2
相同。 a >> 1
与a/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