十进制与二进制之间的转换

十进制转二进制

① 整数部分
方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。下面举例:
例:将十进制的168转换为二进制

得出结果 将十进制的168转换为二进制,(10101000)2
分析:第一步,将168除以2,商84,余数为0。
第二步,将商84除以2,商42余数为0。
第三步,将商42除以2,商21余数为0。
第四步,将商21除以2,商10余数为1。
第五步,将商10除以2,商5余数为0。
第六步,将商5除以2,商2余数为1。
第七步,将商2除以2,商1余数为0。
第八步,将商1除以2,商0余数为1。
第九步,读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,即10101000

 1     public static void main(String[] args) {
 2         int n = 168;
 3         String result = "";
 4         boolean minus = false;
 5         //如果该数字为负数,那么进行该负数+1之后的绝对值的二进制码的对应位取反,然后将它保存在result结果中
 6         if(n < 0){
 7             minus = true;
 8             n = Math.abs(n + 1);
 9         }
10         while(true){
11             int remainder = (!minus && n % 2 == 0) || (minus && n % 2 == 1) ? 0 : 1;
12 
13             //将余数保存在结果中
14             result = remainder + result;
15             n /= 2;
16 
17             if(n == 0){
18                 break;
19             }
20         }
21         //判断是否为负数,如果是负数,那么前面所有位补1
22         if(minus){
23             n = result.length();
24             for(int i = 1; i <= 32 - n; i++){
25                 result = 1 + result;
26             }
27         }
28         System.out.println(result);//10101000
29     }

参考:http://www.cnblogs.com/lds85930/archive/2007/09/19/897912.html 

参考:http://blog.csdn.net/qq_24696917/article/details/51912706

posted @ 2017-09-30 10:19  不像程序员  阅读(887)  评论(0编辑  收藏  举报