问题描述
输入[-128,127]内的整数,输出其二进制表示。提示,可使用按位与&输入格式 例:7输出格式 例:00000111样例输入一个满足题目要求的输入范例。
例:
7样例输出与上面的样例输入对应的输出。
例:
00000111数据规模和约定 输入数据中每一个数的范围。
例:0<n,m<100, 0<=矩阵中的每个数<=1000。
思路:
这题谈不上有什么思路,就是运用了系统的方法而已,不过再蓝桥杯练习系统上也能通过,我早上花了有一两个小时吧,打算把输入的数字用while循环转化为二进制,如果是输入的负数,我就把他的正数的二进制算出来,在转化为反码,在转化为补码(答案);可惜在最后转为补码的时候有点小差错,最后实在受不了了就用了系统定义的方法来求……
解决方法:
使用Integer.toBinaryString();将输入的数字转化为二进制
代码块:
import java.util.Scanner;
public class OutputErJinZhiBiaoShi_One {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
//将用户输入的数字转化为二进制
String s =Integer.toBinaryString(i) ;
//System.out.println(s);
//如果该二进制数没有8位,则自动补0
while(s.length() < 8){
s = "0" + s;
}
//使用数组,遍历该二进制的最后8八位
char[] arr = s.toCharArray();
for(int x = s.length()-8; x < s.length(); x++){
System.out.print(arr[x]);
}
}
}
虽然我自己做的有点残缺,但是还是想放上来,希望路过的大神可以指点一下,在下感激不尽!!!
代码块:
import java.util.Scanner;
public class OutputErJinZhiBiaoShi {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//接收用户输入的数
int n = sc.nextInt();
//如果该数字大于等于0,则直接求除对应的二进制数
if(n >= 0){
String str = "";
while(n>0){
int temp = n % 2;
str = temp + str;
n /= 2;
}
//System.out.println(str);
while(str.length() < 8){
str = "0" + str;
}
System.out.println(str);
//如果用户输入一个负数
}else{
//把负数转化为正数
n = -n;
//定义一个字符串用户接收这个正数的二进制数
String str = "";
while(n>0){
int temp = n % 2;
str = temp + str;
n /= 2;
}
//补0,直到该二进制数为8位
while(str.length() < 8){
str = "0" + str;
}
System.out.println("该数字的正数形式:"+str);
//定义一个数组,将上面的二进制数逐一判断
//把0转化为1,把1转化为0(原码变反码)
char[]arr1 = str.toCharArray();
String s1 = "";
for(int i = 0; i < str.length(); i++){
if(arr1[i] == 48){ //'48' = 0
arr1[i] = '1';
s1 += arr1[i];
}else if(arr1[i] == 49){//'49' = 1
arr1[i] = '0';
s1 += arr1[i];
}
}
System.out.println("该数字的反码形式:"+s1);
//把上面数字的反码形式拆开
//对反码进行加一处理,(反码变补码)
//如果1+1,则等于0(逢二进一);如果0+1,则等于1
char[]arr2 = s1.toCharArray();
int j = 7;
//定义一个for循环,对字符串s1(反码)从最后一位进行判断
for(int i = str.length()-1; i >= 0 ; i--){
//如果最后一位等于1,则进一
if(arr2[i] == 49){
j--;
arr2[i] = '0';
s1 = s1.replace(arr1[i], arr2[i]);
continue;
}
System.out.println("arr2[7]:"+arr2[j]);
System.out.println("j:"+j);
//如果最后一位等于0,则把0转化为1,直接输出
if(arr2[j] == 48){
arr2[j] = '1';
System.out.println("arr2[j]:"+arr2[j]+" arr1[j]:"+arr1[j]);
s1 = s1.replace(arr1[j], '1');
System.out.println(s1+"!");
break;
}
}
System.out.println("该数字的二进制:"+s1+"!!!");
}
}
}
以上就是个人写的代码,里面包括了原码转反码转补码的小知识,个人感觉下面的链接里讲的不错,所以双手奉上(负数的二进制、原码、反码、补码)
有兴趣的可以看看
最后,个人的总结,虽然没有用自己的代码敲出来,但是理解了什么是原码、反码以及补码的一些问题,没有赚,但是绝对不亏!!!