我们一般赋值
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类型的越界问题,能解决所有的十进制转换二进制的问题。