首先我们要对原码、反码和补码有个了解:
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);
}
}
}