首先看一小段代码
int i =0;
i = i<< 1;;
这和i等于等于多少呢?
答案是0;
那如果在左移一位的情况下加1呢
int i =0;
i = i<< 1;;
i= i+1;
答案是1;
那如果在左移一位呢?
int i =0;
i = i<< 1;;
i= i+1;
i = i<<1;
结果为2,因为此时 i 的二进制位 1 0;
如果在左移一位呢?
结果为 4 , 二进制位1 0 0
到了这里如果让你把100转换为十进制怎么转?
- 第一次,定义一个i左移一位,加上第一位,结果为
1
,二进制位1
; - 然后左移一位加上第二位0,结果为
2
,二进制位1 0
; - 然后在左移一位加上第三位0,结果为
4
,二进制为1 0 0.
String str = "100";
int i = 0 ;
i = i<<1;//0
i+= Integer.parseInt(str.charAt(1)+"")==1?1:0;//为1就加一, 此时结果为1
i = i<<1;//10 = 2
i+= Integer.parseInt(str.charAt(2)+"")==1?1:0;//2+0
i = i<<1;//100 = 4
i+= Integer.parseInt(str.charAt(3)+"")==1?1:0;//4+0
有没有发现规律
利用位运算的左移,我们能确保数据以十进制保存,但是他的二进制和需要准换的二进制一摸一样。直接就得到了我们所需要的字符串.
我们可以利用charAt()得到字符串中的每一个字符,然后判断是否为1,利用for循环从头到尾逐个运算即可。
代码:
public static int binaryToDec(String s){
int length = s.length();
int ans =0;
for (int i =0 ;i < length;i++){
ans <<=1;//左移运算 等价于 ans = ans<<1;
//当前位为1,就将他赋为1
ans+= Integer.parseInt(s.charAt(i)+"")==1?1:0;
}
//返回最终结果
return ans;
}