首先我们要对原码、反码和补码有个了解:
1、所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
2、反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。 原码10010= 反码11101
(10010,1为符号码,故为负) (11101) 二进制= -13 十进制
3、补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
举一例,我们来看整数-2在计算机中如何表示。
假设这也是一个int类型,那么:
1、先取1的原码:00000000 00000000 00000000 00000010
2、得反码: 11111111 11111111 11111111 11111101
3、得补码: 11111111 11111111 11111111 11111110
Java中整数的二进制表示
public class Test4 { public static void main(String args[]) { /* //创建Scanner对象,接受从控制台输入 Scanner input=new Scanner(System.in); //接受String类型 String str=input.next(); //输出结果 System.out.println(str); */ Scanner input = new Scanner(System.in); int number = input.nextInt(); input.close(); //关闭输入流 int remainder; //定义一个变量用于存储余数 String s = new String(); //判断是否为负数 if (number >= 0) { while (number != 0) { remainder = number % 2; number /= 2; if (remainder != 0) s = s.concat("1"); else if (remainder == 0) s = s.concat("0"); } //使用StringBuilder的reverse函数反转字符串 System.out.println(new StringBuilder(s).reverse().toString()); } else if (number < 0) { //第一种方法:直接调用java的toBinaryString函数输出 //System.out.println(Integer.toBinaryString(number)); //第二种方法:通过用右移运算符>>和与运算符&来获取number末位的二进数,然后再用数组str存入 int size = 32; //int型的32位 char[] str = new char[size + 1]; for(int i = size - 1; i >= 0; --i, number >>= 1) { str[i] = (char) ('0' + (1 & number)); } str[size] = '\0'; System.out.println(str); } } }