zoukankan      html  css  js  c++  java
  • 十进制转二进制

      如果用传统的方法,除2取余这种方式,不够快。计算机能够可以直接进行位运算。

      我们将要转换的数称作number,需要做的操作就是把number的二进制形式的情况下每次挤出一个数,然后将它保存起来。

      接下来这样操作:

      number>>1  <<1  ^  number

      (^:异或运算,当两者相等时,结果为0,否则为1);

       我们先将number右移一位,然后左移一位,举个例子来说,9二进制表示为1001,右移一位:100,左移一位:1000,此时,去掉了1001的末尾的一位。然后与原来的1001做异或运算:1,即可表示为1001的末尾位。同样,然后(1001>>1)>>1 <<1 ^ (1001>>1),100右移一位然后左移一位即100,100右移一位然后左移一位还是100,两者做异或运算,为0,即是1001的第二位。因此继续下去,直至1001>>n(n为次数)等于0之前,得出的即是二进制数。

      当然实则上,java自带的有这种函数:Integer.toBinaryString(int i),可以直接转换为二进制字符串。

    例题:

      将数组中的偶数反转(反转规则,二进制反转,比如11的二进制位1011,则反转为1101)

     1 import java.util.Arrays;
     2 import java.util.Scanner;
     3 
     4 
     5 public class EvenNumberTurn {
     6     public static String toBinary(int number){
     7         String turnAfter=new String();
     8         int temp;
     9         int index=0;
    10         if(number==0){
    11             return String.valueOf(number);
    12         }
    13         while(number!=0 && number>>index>0){
    14             temp=(((number>>index)>>1) <<1) ^ (number>>index);
    15             turnAfter=temp+turnAfter;
    16             index++;
    17         }
    18         return turnAfter.toString();
    19     }
    20     public static String turnBinary(String number){
    21         StringBuffer str=new StringBuffer();
    22         str.append(number);
    23         String tmp=str.reverse().toString();
    24         return tmp;
    25     }
    26     public static int toDecimal(String a){
    27         int decimal=0;
    28         for(int j=0, i=a.length()-1;i>=0;i--){
    29             decimal=Integer.parseInt(String.valueOf(a.charAt(i))) * (new Double(Math.pow(2,j++))).intValue()+decimal;    
    30         }
    31         return decimal;
    32     }
    33     public static int turn(int number){
    34         if(number%2==0){
    35             String binary=toBinary(number);
    36             int turnEven=toDecimal(turnBinary(binary));
    37             return turnEven;
    38         }
    39         else{
    40             return number;
    41         }
    42     }
    43     
    44     public static void main(String args[]){
    45         Scanner read=new Scanner(System.in);
    46         int a=Integer.parseInt(read.nextLine());
    47         String str=read.nextLine();
    48         int[] arr=new int[a];
    49         String[] strArr=str.split(" ");
    50         for(int i=0;i<a;i++){
    51             arr[i]=Integer.parseInt(strArr[i]);
    52             arr[i]=turn(arr[i]);
    53             System.out.println(arr[i]);
    54         }
    55         
    56         
    57     }
    58 }
    jeyfang
  • 相关阅读:
    酷传
    公司简介-一点租车
    果酷:80后IT男“鲜果切”年入千万 _ 财经频道 _ 东方财富网(Eastmoney.com)
    聚焦设计交易与商业落地 DANG·DHUB设计师平台上线【图】_品牌资讯_服饰_太平洋时尚网
    J.Hilburn:高档男装市场颠覆者_网易财经
    《反脆弱》:在不确定性中连接美丽的意外 : 经理人分享
    艺术妙在似与不似之间,太似则媚俗,不似为欺世._砚云_新浪博客
    齐白石_百度百科
    微信电影票_百度百科
    京东亦庄 招研发小伙伴 4 位
  • 原文地址:https://www.cnblogs.com/jeyfang/p/5723843.html
Copyright © 2011-2022 走看看