请高手来解释一下 if(n & (n-1) == 0) return true;else return false;这是在判断一个数是否为2的幂次,请高手来具体解释一下,具体的运算过程。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 &是按位运算符参与运算的两个值,如果两个相应的位都为1,则该位的结果为1,否则为0,即:0&0 = 0 ;0&1=0 ;1&0=0;1&1=1;例如:0010 1010 & 0001 0111 = 0000 0010 如果一个数是2的幂,那么它的2进制里只有一位是1 其他都是 0那么该数减1 后 它的2进制中是1 的那一位变成了0 后边的 0 都是1 了故有 n & (n-1) == 0; n & (n-1) == 0;是错的要写成 (n & (n-1)) == 0; 如果一个数是2的幂,那么它的2进制里只有一位是1 其他都是 0那么该数减1 后 它的2进制中是1 的那一位变成了0 后边的 0 都是1 了故有 (n & (n-1)) == 0;相反 如果一个数不少2 的幂 ,那么它的的2进制里就会有多位是1那么该数减1后 只是最后的那个1边成0,该1后的0变成1。而该数前边的1都是不会变的也即 (n & (n-1)) > 0; 1000分:请教一个JNA 调用 DLL的参数传递 JTable怎样读取数据库的值 编写 JAVA 界面 获取文件地址 JAVA如何实现可配置的EXE程序? 一个关于java se 1.5.0_14 的classpath设置问题? 大家讨论一下用什么技术实现将模型数据显示为图片,而图片则随着模型数据的改变而改变呢! 新手----一道小题有点看不懂啊 关于一个javascript的问题,急~~~~ 新手碰到的一个弱弱的问题 一个未毕业的程序员,该怎么去走这条路?! 我很想做个知道 求带有农历的日历代码
参与运算的两个值,如果两个相应的位都为1,则该位的结果为1,否则为0,即:
0&0 = 0 ;0&1=0 ;1&0=0;1&1=1;
例如:0010 1010 & 0001 0111 = 0000 0010
那么该数减1 后 它的2进制中是1 的那一位变成了0 后边的 0 都是1 了
故有 n & (n-1) == 0;
要写成 (n & (n-1)) == 0;
那么该数减1 后 它的2进制中是1 的那一位变成了0 后边的 0 都是1 了
故有 (n & (n-1)) == 0;
相反 如果一个数不少2 的幂 ,那么它的的2进制里就会有多位是1
那么该数减1后 只是最后的那个1边成0,该1后的0变成1。
而该数前边的1都是不会变的
也即 (n & (n-1)) > 0;