十进制转二进制
① 整数部分
方法:除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