Java中的二进制、八进制、十六进制和移位运算
一个源代码说明一切:
package com.apkkids.javalanguage;
import java.util.Random;
/**
* @author wxb Description:二进制、八进制、十六进制,移位运算
*
* 2015-9-28 下午8:31:04
*/
public class BitCompute {
public static void main(String[] argv) {
testRadix();
testBitMove();
}
/**
* 测试各种进制之间的转换
*/
public static void testRadix() {
// 二进制没有特殊表达方法,可用字符串表示
String i2str = "1000";
// 八进制前面加0
int i8 = 010;
// 十进制是自然的
int i10 = 8;
// 十六进制前面加0x
int i16 = 0x8;
// 将二进制的字符串转换为int
int i2 = Integer.parseInt(i2str, 2);
// 测试证明i2、i8、i10和i16本质上是相等的,只是表达形式不同
if (i2 == i8) {
System.out.println("i2==i8");
}
if (i8 == i10) {
System.out.println("i8==i10");
}
if (i10 == i16) {
System.out.println("i10==i16");
}
int i = i2;
// 转换为各种形式的字符串
System.out.println("radix=2,i=" + Integer.toBinaryString(i));
System.out.println("radix=8,i=" + Integer.toOctalString(i));
System.out.println("radix=10,i=" + Integer.toString(i));
System.out.println("radix=16,i=" + Integer.toHexString(i));
// 甚至可以有7进制、5进制
System.out.println("radix=7,i=" + Integer.toString(i, 7));
System.out.println("radix=5,i=" + Integer.toString(i, 5));
// 由此可知,在内存中i、i2、i8、i10、i16都是一样的,不同的只是表现形式;因此不同进制之间不需要转换,只是在需要时用不同的形式表达
int j8 = 010;
int j10 = j8;
System.out.println("j8=" + j8 + ",j10=" + j10);
int j16 = 0x10;
j10 = j16;
System.out.println("j16=" + j16 + ",j10=" + j10);
}
/**
* 测试位移运算,经常用于计算Color
*/
public static void testBitMove() {
Random rand = new Random();
int red = rand.nextInt(255);
int green = rand.nextInt(255);
int blue = rand.nextInt(255);
int color = 0xFF000000;
color = color | red << 16 | green << 8 | blue;
System.out.println("red = " + Integer.toHexString(red) + ", green = "
+ Integer.toHexString(green) + ", blue = "
+ Integer.toHexString(blue));
System.out.println("color in Hex = " + Integer.toHexString(color));
}
}