检查给定数字是否是二的幂

Check whether a given number is a power of two

我正在尝试编写一个函数,如果输入的数字是 2 的幂,则 return 值为 1,否则 return 值为 0。

function val = func_1(num)
   while not(num == 1)
      if num%2~=0
         val=0;
         break
      end
      num=num/2;
      val=1;
   end
end

但不幸的是,函数总是return一个值1。是不是算法或代码有错误?在此先感谢您的帮助。

在Matlab中,%是注释符。从那一点开始直到行尾的所有内容都将被忽略。这意味着这一行 if num%2~=0 没有按照您的想法行事。

而是使用 mod 函数。 link。在这种情况下,相关行变为 if mod(num, 2)~=0.

另外,我怀疑有一种更有效的方法可以做到这一点。参见,例如,here.