本帖最后由 NNERO 于 2014-4-24 16:56 编辑
首先我知道可以用Integer.toBinary方法直接转,
但是我想自己写一个理解它的概念,我自己的方法如下:
- public class Text111 {
- public static void main(String[] args) {
- int sum = -2153;
- System.out.println(toBin(sum));
- }
- public static String toBin(int sum){
-
- StringBuilder sb = new StringBuilder();
- sum=~sum;//按位取反,将其变为正数
- sum=sum^0x7fffffff;//变正数后,与2进制数0x7fffffff异或 刚好就是负数2进制,但是这是我自己拼出来的,不理解为何
- do{
- sb.append(sum%2);//转换后的数,转换为字符串
- }while((sum/=2)!=0);
- sb.insert(sb.length()-1, "1");//最高位添加1来获得32位二进制数。
- return sb.reverse().toString();//调用方法翻转字符串并转为String类型
- }
- }
复制代码 注释里有地方不太理解。
这个方法貌似不太好,毕老师说负数2进制是该数正数按位取反再加1,但是按位取反可以,加1怎么搞?加1不就是10进制的1么? 怎么才能加二进制1?
没有头绪,有没有其他算法来转换。
|