精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-12-02
最后修改:2011-12-05
顺杆爬,简化掉jdk对负数的处理因为负数已经被转化了
public static int bitCount(byte b) { int i = (b>>>31<<7) + (b&0x7F); i = (i&0x55)+(i>>>1&0x55); i = (i&0x33)+(i>>>2&0x33); return (i&0x0F)+(i>>>4); } |
|
返回顶楼 | |
发表时间:2011-12-03
b_l_east 写道
嘎嘎,本人最近刚好用了一下byte,像你这种情况只需不断右移然后和1取与运算就行了。
byte b = ...; int count = 0; for (i=0; i<4; i++) { if ((b >> i) & 1) == 1) count ++; }
我也是这么想的,移位运算的效率 应该会更高。 |
|
返回顶楼 | |
发表时间:2011-12-03
ErLang的bit string版本。 count1s(<<B1:1,B2:1,B3:1,B4:1,B5:1,B6:1,B7:1,B8:1>>)->B1+B2+B3+B4+B5+B6+B7+B8. |
|
返回顶楼 | |
发表时间:2011-12-04
最后修改:2011-12-04
如果是负数,存的是反码
|
|
返回顶楼 | |
发表时间:2011-12-05
计算二进制数据里有多少个1,有更好的方法:
num=0; while (byte) { num++; byte &=(byte -1 ) } 在编程之美里有阐述,这个是最快的算法,但在实际应用中,如果byte取值范围小,可以用数组保存对应的个数,通过数组直接读取.. |
|
返回顶楼 | |
发表时间:2011-12-05
我以为会用位移和&操作来做
|
|
返回顶楼 | |
发表时间:2011-12-05
yymt 写道 计算二进制数据里有多少个1,有更好的方法:
num=0; while (byte) { num++; byte &=(byte -1 ) } 在编程之美里有阐述,这个是最快的算法,但在实际应用中,如果byte取值范围小,可以用数组保存对应的个数,通过数组直接读取.. 这个方法最早见于 K&R C语言编程(第二版)的一道习题.诀窍是 x&(x-1)会消除x最低位的1 |
|
返回顶楼 | |
发表时间:2011-12-05
如果是在java中为啥不作为一个字符串,然后调用split分割然后数组长度即为1的个数
|
|
返回顶楼 | |
发表时间:2011-12-06
直接位移就行了。
|
|
返回顶楼 | |
发表时间:2011-12-06
public static void main(String[] args) {
byte b = 127; String binary = Integer.toBinaryString(b & 0xff); System.out.println(binary); int count = 0; while (b > 0) { if ((b & 1) == 1) { count++; } b >>= 1; } System.out.println(count); } |
|
返回顶楼 | |