java的数字二进制输出

Python016

java的数字二进制输出,第1张

首先,java里int是有32位2进制数组成的

我们一般赋值

int

i

=

1

这个是赋值10进制的数

赋值

2进制要

int

i

=

01(前面加个0,就表示是2进制数)

赋值16进制(常用)

int

i

=

0x00000001

(0x表示为16进制数)

3种的值都是1.

要用2进制输出就是Integer.toBinaryString(i)

拓展:

因为计算机处理位运算速度是非常快的(应该是最快的运算)

所以很多时候,如果有一堆boolean变量需要表示时,

一般只用1个int的数表示,如:

int

i

=

0x0000000f//表示后4位为1

int

m

=

(i

>>

2)

&

1

//

其中m就是表示某一位的值,2表示右边开始数第2位(当然是从第0位开始算的)

这样就能取具体每一位的值

这种方法在很吃代码效率的程序中经常遇到

全手打,望支持

1、创建java类,TestNumConv.java;

2、编写java函数,十进制转二进制;

public static void decimalToBinary(int n) {

String str = ""

while (n != 0) {

str = n % 2 + str

n = n / 2

}

System.out.println(str)

}

3、编写java函数,二进制转十进制;

public static void binaryToDecimal(String n) {

System.out.println(Integer.parseInt(n, 2))

}

4、在main方法中,分别调用该两个函数,执行结果满足要求;

TestNumConv.decimalToBinary(123)

TestNumConv.binaryToDecimal("11011")

利用Java API直接转换

十进制数如何转换为二进制数,这在java API 中有一个方法,Integer.toBinaryString( ) 括号里面写上你要转换的十进制数,这样可以直接转换。例如:

public static void main(String[] args) {

        十进制转换为二进制

        System.out.println(Integer.toBinaryString(10))

    }

通过求余,求商,并计算值(例如:把二进制的1010 直接输成十进制的1010)实现

public static void main(String[] args) {

        // TODO Auto-generated method stub

        int a = 123//定义一个变量并赋给他一个十进制的值

        int remainder//定义一个变量用于存储余数

        int sum = 0//定义一个变量用于存放和

        int k = 1//定义一个变量控制位数

        while(a != 0){

            remainder = a % 10//对目标数字求余

            a /= 2//对目标数字求商

            sum = sum + remainder * k//求和

            k *= 10//改变位数

        }

        System.out.println("10进制的123转换为2进制结果为:" + sum )

    }但是这种方法存在一个问题:因为int类型是有取值范围的,如果转换的二进制数字超出了范围(例如:10011100110110)这个数字明显超出了int的取值范围,这样我们用int类型的sum进行存储的时候他就会自动转换为一个其他的数字。并且这个方法没有办法求负数的二进制数。

在方法二的基础上使用字符串对结果集进行存储

public static void main(String[] args) {

        int n = -10

        String result = ""

        boolean minus = false

        //如果该数字为负数,那么进行该负数+1之后的绝对值的二进制码的对应位取反,然后将它保存在result结果中

        if(n < 0){

            minus = true

            n = Math.abs(n + 1)

        }

        while(true){

            int remainder = (!minus && n % 2 == 0) || (minus && n % 2 == 1) ? 0 : 1

            //将余数保存在结果中

            result = remainder + result

            n /= 2

            if(n == 0){

                break

            }

        }

        //判断是否为负数,如果是负数,那么前面所有位补1

        if(minus){

            n = result.length()

            for(int i = 1 i <= 32 - n i++){

                result = 1 + result

            }

        }

        System.out.println(result)

    }用这种方法就能很好解决int类型的越界问题,能解决所有的十进制转换二进制的问题。