计算javajava 二进制计算数,要求有过程

Java实例4 - 快速计算二进制数中1的个数(Fast Bit Counting)
Java实例4 - 快速计算二进制数中1的个数(Fast Bit Counting)
发布时间: 15:13:02
编辑:www.fx114.net
本篇文章主要介绍了"Java实例4 - 快速计算二进制数中1的个数(Fast Bit Counting)",主要涉及到Java实例4 - 快速计算二进制数中1的个数(Fast Bit Counting)方面的内容,对于Java实例4 - 快速计算二进制数中1的个数(Fast Bit Counting)感兴趣的同学可以参考一下。
* 快速计算二进制数中1的个数(Fast Bit Counting)
* 该算法的思想如下:
* 每次将该数与该数减一后的数值相与,从而将最右边的一位1消掉
* 直到该数为0
* 中间循环的次数即为其中1的个数
* 例如给定&10100“,减一后为”10011&,相与为&10000&,这样就消掉最右边的1
* Sparse Ones and Dense Ones were first described by Peter Wegner in
* “A Technique for Counting Ones in a Binary Computer“,
* Communications of the ACM, Volume 3 (1960) Number 5, page 322
public class CountOnes {
public static void main(String[] args) {
int i = 7;
CountOnes count = new CountOnes();
System.out.println(&There are & + count.getCount(i) + & ones in i&);
* @param i 待测数字
* @return 二进制表示中1的个数
public int getCount(int i) {
for(n=0; i & 0; n++) {
i &= (i - 1);
本文标题:
本页链接:算出一个数字的二进制包含多少个1 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 9时,
题目:给出一个数字n,列出&[0,n)&这个集合中每个数字的二进制包含多少个1.例如:数字50,&1,&2,&3,&4包含1的个数分别是0,&1,&1,&2,&1
代码片段(1)
1.&[代码][Java]代码&&&&
public static void main(String[] args) {
printNum(10);
public static void printNum(int n) {
int[] nums = new int[n];
int lastPow2 = 1;
for(int i = 0; i & i++) {
if(i == 0) {
nums[i] = 0;
} else if((i&(i - 1)) == 0) {
nums[i] = 1;
lastPow2 =
nums[i] = nums[i - lastPow2] + 1;
printNums(nums);
public static void printNums(int[] nums) {
for (int num : nums) {
System.out.println(num);
开源中国-程序员在线工具:
相关的代码(175)
开源从代码分享开始
ahern88_的其它代码求教达人:java中如何得到一个二进制数的哪几位是1,要求不用遍历数位?
[问题点数:20分,结帖人donquixote1984]
求教达人:java中如何得到一个二进制数的哪几位是1,要求不用遍历数位?
[问题点数:20分,结帖人donquixote1984]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年4月 Java大版内专家分月排行榜第二2010年8月 Java大版内专家分月排行榜第二2010年5月 Java大版内专家分月排行榜第二2008年2月 Java大版内专家分月排行榜第二2007年7月 Java大版内专家分月排行榜第二
2011年2月 Java大版内专家分月排行榜第三2010年9月 Java大版内专家分月排行榜第三2008年9月 Java大版内专家分月排行榜第三2008年1月 Java大版内专家分月排行榜第三2007年11月 Java大版内专家分月排行榜第三2007年9月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。用JAVA把二进制数转换成十进制数。_百度知道在算术运算符部分,需要特别注意的一个语法现象是&晋升&。晋升指低于int的3种数字类型(byte、short和char)进行算术运算后,结果会自动提升成int类型。示例代码如下:
&&&&&&&&&&&&&&&&&& byte b1 = 10;
&&&&&&&&&&&&&&&&&& byte b2 = 20;
&&&&&&&&&&&&&&&&&& byte b3 = b1 + b2; //语法错误,类型不匹配
&&&&&&&&&&&&&&&&&& int n = b1 + b2;&&& //或者 byte b3 = (byte)(b1 + b2);
最后说一下&&和&的区别,其实在进行逻辑与运算时,既可以使用&&也可以使用&,在功能上本身没有区别。两者区别的位置在,对于&来说,如果左侧条件为false,也会计算右侧条件的值,而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。
&&&&&&&& 示例代码:
&&&&&&&&&&&&&&&&&& int n = -1;
&&&&&&&&&&&&&&&&&& boolean b1 = (n &= 0) && (n & 10);
&&&&&&&&&&&&&&&&&& boolean b2 = (n &= 0) & (n & 10);
&&&&&&&& 则对于第二行代码来说,两个条件都将被计算,而对于第三行代码来说,因为n &= 0这个条件不成立,则n & 10根本不会被执行。当然,两者得到的最终结果是一样的。
&&&&&&&& 对于现在的代码来说,区别不大,但是如果后续的条件是一个方法(方法的概念后续将介绍到),则将影响程序逻辑。
&&&&&&&& 由于计算机内部的数据都以二进制的形式存在,所以在Java语言中提供了直接操作二进制的运算符,这就是下面要讲解的位运算符和移位运算符。
&&&&&&&& 使用二进制的运算符,可以直接在二进制的基础上对数字进行操作,执行的效率比一般的数学运算符高的多,该类运算符大量适用于网络编程、硬件编程等领域。
&&&&&&&& 二进制运算符在数学上的意义比较有限。
&&&&&&&& 在Java代码中,直接书写和输出的数值默认是十进制,Java代码中无法直接书写二进制数值,但是可以书写八进制和十六进制数字,八进制以数字0开头,例如016,十六进制以数字0和x开头,例如0x12,0xaf等等。
&&&&&&&& 在计算二进制运算时,Java语言的执行环境(JRE)首先将十进制的数字转换为二进制,然后进行运算。如果输出结果的值,则数字会被转换成十六进制进行输出。
&&&&&&&& 需要注意的是:
1、正数的机器数是原码,负数的机器数是补码,计算时需要小心。关于二进制和补码的计算可以参看《Java编程那些事儿7&&进制的概念》和《Java编程那些事儿8&&计算机内部的数据表达》。
&&&&&&&&&&&&&&&&& 2、整数型的计算结果都是int型,而不管是对byte还是short进行二进制运算。
4.5.1 位运算符
&&&&&&&& Java语言中的位运算符主要有4种:&(位与)、|(位或)、^(异或)和~(按位取反),下面依次介绍运算规则和使用示例。
运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位都为1,则运算结果为1,否则为0。
适用场合:屏蔽数字中某一位或某些位。因为任何数和0与都是0。
示例代码:
&&&&&&&& int a = 4;
&&&&&&&& int b = 10;
&&&&&&&& int c = a &
计算过程:
&&&&&&&&& 4的二进制形式为00 00
&& 10的二进制形式为00 00
按照计算规则,结果为00 00
这个数字转换为十进制就是数字0
运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位有一个为1则为1,否则为0。
适用场合:将数字中某一位或某些位修改成1。因为1和任何数或都是1。
示例代码:
&&&&&&&& int a = 4;
&&&&&&&& int b = -10;
&&&&&&&& int c = a |
计算过程:
&&&&&&&&& 4的二进制形式为00 00
&& -10的二进制形式为11 11
按照计算规则,结果为11 11
这个二进制数转换为十进制就是数字-10。
运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位相同为零,不相同为1。
适用场合:判断数字对应的位是否相同。
示例代码:
&&&&&&&& int a = 4;
&&&&&&&& int b = 10;
&&&&&&&& int c = a ^
计算过程:
4的二进制形式为00 00
&& 10的二进制形式为00 00
按照计算规则,结果为00 00
这个数字转换为十进制就是数字14
运算规则:只操作一个数字,将该数字中为1的位变成0,为0的位变成1。
适用场合:反转数字的内容
示例代码:
&&&&&&&& int a = 4;
&&&&&&&& int c = ~a;
计算过程:
4的二进制形式为00 00
按照计算规则,结果为11 11
这个数字转换为十进制就是数字-5。
其实位运算和实际的应该实现保持一致,也就是提供的电路级运算符号,每种运算符都有对应的电路实现。
&&&&&&&& 实际使用简单示例:
把任意数字转换为正数
假设n是一个任意的整数,则把n转换为正数的代码为:
&&&&&&&& int m = n & 0x7
判断任意数字倒数第三位的值是否为1
假设n是一个任意的整数,则判断的代码为:
int m = n & 0x4;
boolean b = (m != 0);
将任意数字倒数第四位置为1
假设n是一个任意的整数,则代码为:
&&&&&&&& int m = n | 0x8;
4.5.2 移位运算符
&&&&&&&& 移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:&&(左移)、&&(带符号右移)和&&&(无符号右移)。
&&&&&&&& 在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同。
&&&&&&& 例如11 && 2,则是将数字11右移2位
计算过程:
&&&&&&&& 11的二进制形式为:00 00 ,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是00 00 。转换为十进制是2。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4097次
排名:千里之外

我要回帖

更多关于 二进制的除法计算过程 的文章

 

随机推荐