java 中十进制数的 8 位表示
An 8-bit representation of decimal Numbers in java
我目前正在努力练习将 -128 和 +127 之间的带符号十进制数转换为二进制补码系统中的 8 位二进制表示形式。
我能够得到正数的表示,但是当代码运行时输入为负数时,它会进行计算,但我无法得到正确的二进制表示。例如,8 位表示中的“57”将是“00111001”,相同表示中的 -57 将是“11000111”
我很确定我必须做一个 if 语句,但是我无法让它工作。很失落
System.out.println("Please enter a decimal to modify into it's binary.");
decimalInput = stdIn.nextInt();
if (decimalInput < 0){
decimalInput= Math.abs(decimalInput);
if(i==0){
binary[i]=1;
}else if (i==1){
binary[i] = 0;
}
}
for ( i = binary.length-1; i >= 0; i--){
remain = decimalInput % 2;
binary[i]=remain;
decimalInput = decimalInput / 2;
}
for (i =0; i <8; i++){
System.out.print(binary[i]);
}
那是因为您在下一个 for 循环中使用 decimalInput 再次计算数字的二进制(post 您采用十进制数的绝对值并将该数字转换为二进制)。您正在重复相同的 for 循环。
你可以这样做:
int computeValue = decimalInput;
if (decimalInput < 0){
computeValue= Math.abs(decimalInput);
}
for (...){
negRemain = computeValue% 2;
...
}
编辑 2s 补码:
如果(十进制输入 < 0){
handleNegativeNumbers(二进制);
}
private static void onesComplements(int[] binary) {
for (int i = 0; i < binary.length; i++) {// will perform one's complement
if (binary[i] == 0) {
binary[i] = 1;
} else {
binary[i] = 0;
}
}
}
private static void twosComplement(int[] binary) {
int carry = 1;
for (int i = binary.length - 1; i >= 0; i--) {// will perform two's complement by adding one
if (carry == 1) {
if (binary[i] == 0) {
binary[i] = 1;
carry = 0;
break;
} else {
binary[i] = 0;
}
}
}
}
private static void handleNegativeNumbers(int[] binary) {
onesComplements(binary);
twosComplement(binary);
}
我目前正在努力练习将 -128 和 +127 之间的带符号十进制数转换为二进制补码系统中的 8 位二进制表示形式。
我能够得到正数的表示,但是当代码运行时输入为负数时,它会进行计算,但我无法得到正确的二进制表示。例如,8 位表示中的“57”将是“00111001”,相同表示中的 -57 将是“11000111”
我很确定我必须做一个 if 语句,但是我无法让它工作。很失落
System.out.println("Please enter a decimal to modify into it's binary.");
decimalInput = stdIn.nextInt();
if (decimalInput < 0){
decimalInput= Math.abs(decimalInput);
if(i==0){
binary[i]=1;
}else if (i==1){
binary[i] = 0;
}
}
for ( i = binary.length-1; i >= 0; i--){
remain = decimalInput % 2;
binary[i]=remain;
decimalInput = decimalInput / 2;
}
for (i =0; i <8; i++){
System.out.print(binary[i]);
}
那是因为您在下一个 for 循环中使用 decimalInput 再次计算数字的二进制(post 您采用十进制数的绝对值并将该数字转换为二进制)。您正在重复相同的 for 循环。
你可以这样做:
int computeValue = decimalInput;
if (decimalInput < 0){
computeValue= Math.abs(decimalInput);
}
for (...){
negRemain = computeValue% 2;
...
}
编辑 2s 补码: 如果(十进制输入 < 0){ handleNegativeNumbers(二进制); }
private static void onesComplements(int[] binary) {
for (int i = 0; i < binary.length; i++) {// will perform one's complement
if (binary[i] == 0) {
binary[i] = 1;
} else {
binary[i] = 0;
}
}
}
private static void twosComplement(int[] binary) {
int carry = 1;
for (int i = binary.length - 1; i >= 0; i--) {// will perform two's complement by adding one
if (carry == 1) {
if (binary[i] == 0) {
binary[i] = 1;
carry = 0;
break;
} else {
binary[i] = 0;
}
}
}
}
private static void handleNegativeNumbers(int[] binary) {
onesComplements(binary);
twosComplement(binary);
}