计算机中只有0和1,而不同的0和1的排列组合表示数据,如字母,汉字等。
1 十进制 --->二进制 原理:对十进制数不断进行除2操作 例:6 的二进制数 除2得 3 余 0 3除2 得 1 余 1 1除2 得0余1 二进制数就是 余数 110
2 二进制 --> 十进制 原理: 2进制乘2的过程 例:110 1*2*2 + 1*2+0 得 6
3 十进制 --> 十六进制 原理:先转换成二进制 再转换为十六进制 例 6 --> 0000 0110 每4位 为一个十六进制位 --> 0x06
4 十进制 负数 -->二进制数 原理 十进制负数的绝对值 转换为二进制 取反 加1 例 -6 的二进制值为 6 -->二进制 0000 0000 0000 0110 取反 1111 1111 1111 1001
加1 为 1111 1111 1111 1010
我们知道原理后就来实践一下:
试题:
编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。
提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的 商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。
答:用JAVA实现
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Test {
/**
* 它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。
* @param args
*/
public static void main(String[] args) {
int shang = 0, yu;
boolean flag = false;
System.out.println("请输入一个数字(最大值为<" + Integer.MAX_VALUE + ")");
InputStream inputStream = System.in;
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(inputStreamReader);
try {
String str = reader.readLine();
char[] ch = new char[str.length()];
str.getChars(0, ch.length, ch, 0);
for (int i = 0; i < str.length(); i++) {
if (!Character.isDigit(ch[i])) {
System.out.println("有非数字字符");
System.exit(0);
}
}
try {
shang = Integer.parseInt(str);
flag = true;
} catch (Exception ex) {
ex.printStackTrace();
}
//不断用二除,直到除不开,再把余数倒置
StringBuffer sb = new StringBuffer();
if (flag) {
while (shang != 0) {
yu = shang % 2;
shang = shang / 2;
sb.append(yu);
}
}
System.out.println(sb.reverse());
} catch (IOException e) {
e.printStackTrace();
}
}
}