不使用*、/、+、-、%运算符将数字除以3

如果不使用*/+-%,运算符,如何将数字除以3

数字可以是有符号的,也可以是无符号的

这是一个执行所需操作的简单函数。但它需要+运算符,因此您只需使用位运算符添加值:

//替换+运算符
整数相加(整数x,整数y)
{
while(x){
int t=(x&y)<1;
y^=x;
x=t;
}
返回y;
}
int divideby3(int num)
{
整数和=0;
while(num>3){
总和=相加(num>>2,总和);
num=添加(num>2,num&3);
}
如果(num==3)
总和=相加(总和,1);
回报金额;
}

正如Jim评论的那样,这很有效,因为:

  • n=4*a+b
  • n/3=a+(a+b)/3
  • 因此,sum+=an=a+b,然后迭代

  • a==0(n<4)时,sum+=floor(n/3)即1,如果n==3,则为0

发表评论