无聊,发一个华为的面试题 对语言没有要求,仅仅要求给出算法用最简洁的方法判定给定的一个数字的二进制内有且仅有1个“1” 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 也就是判断是否是2的幂,over 是这样吧x & (x - 1) = 0即此数与上此数小一的数为0即是二进制内有且仅有1个“1” public static void main(String[]args) { int retVal=0; int num=10; for(int i=0;i<31;i++){ retVal+=(num>>>i)&1; } System.out.println(retVal);} String strBin = Integer.toBinaryString(128); System.out.println(strBin); System.out.println(strBin.indexOf(49) == strBin.lastIndexOf(49)); //同样,零除外 public boolean have_one_1(int x){ String a = Integer.toBinaryString(x); return a.matches("0*[1]0*"); } public boolean have_one_1(int x){ String a = Integer.toBinaryString(x); return a.matches("0*[1]0*"); } public boolean have_one_1(int x){ String a = Integer.toBinaryString(x); return a.matches("0*[1]0*"); } return (i & (i - 1)) == 0;记得方法有好多种API里也有一种 return (i & ( -i )) == i;不过当时测试过第一种的效率是最高的当时就觉得狠奇怪为什么API里的那个不是最优可能是出于别的什么考虑吧 本来二进制是数字问题,很多人却把数字变成字符串来处理,实在是饶了远路啊其实也就是一个表达式的问题,一行代码,返回true or false! return (i & (i - 1)) == 0;学习 i & (i - 1) 这个 面试题中 好多类似的 就是得二进制位中1的个数开始想 用位运算, 移位后 再判断~感觉太麻烦 bool Is2Power(int nNum){ return nNum > 0 ? ((nNum & (~nNum + 1)) == nNum ? true : false) : false;} 将此实现,一切ok。for(int i=0;i<=31;i++){ if (x=Math.pow(2,n)) {System.out.print(n);}} Java中沙箱的问题(沙箱对非java语言程序的限制问题) java 二进制int循环左移 关于java 推荐几本java swing 好点的书籍 程序编译成功,但是在操作时候显示【java.lang.NullPointerException】,我又找不出哪里有问题,谁看看 请教一个集合的设计,用来存储一堆书籍对象,实现针对书名快速查询 好奇:能否用java写出能打印自身源代码的程序?谢谢! 为什么我的程序老是提示出错? 想学java,请前辈们多给意见 常用数据类型转换 命令窗口下的java命令 java,如何不影响主程序运行的情况下跳出对话框或者图形界面
public static void main(String[]args)
{
int retVal=0;
int num=10;
for(int i=0;i<31;i++){
retVal+=(num>>>i)&1;
}
System.out.println(retVal);
}
String strBin = Integer.toBinaryString(128);
System.out.println(strBin);
System.out.println(strBin.indexOf(49) == strBin.lastIndexOf(49));
//同样,零除外
String a = Integer.toBinaryString(x);
return a.matches("0*[1]0*");
}
String a = Integer.toBinaryString(x);
return a.matches("0*[1]0*");
}
public boolean have_one_1(int x){
String a = Integer.toBinaryString(x);
return a.matches("0*[1]0*");
}
记得方法有好多种
API里也有一种 return (i & ( -i )) == i;
不过当时测试过
第一种的效率是最高的
当时就觉得狠奇怪为什么API里的那个不是最优
可能是出于别的什么考虑吧
其实也就是一个表达式的问题,一行代码,返回true or false!
学习
{
return nNum > 0 ? ((nNum & (~nNum + 1)) == nNum ? true : false) : false;
}
将此实现,一切ok。for(int i=0;i<=31;i++)
{
if (x=Math.pow(2,n))
{System.out.print(n);}
}