A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© NNERO 中级黑马   /  2014-4-23 20:52  /  1290 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 NNERO 于 2014-4-24 16:56 编辑

首先我知道可以用Integer.toBinary方法直接转,
但是我想自己写一个理解它的概念,我自己的方法如下:
  1. public class Text111 {

  2.         public static void main(String[] args) {
  3.               int sum = -2153;
  4.               System.out.println(toBin(sum));
  5.         }
  6.         public static String toBin(int sum){
  7.                     
  8.                     StringBuilder sb = new StringBuilder();
  9.                     sum=~sum;//按位取反,将其变为正数
  10.                     sum=sum^0x7fffffff;//变正数后,与2进制数0x7fffffff异或 刚好就是负数2进制,但是这是我自己拼出来的,不理解为何
  11.                     do{
  12.                             sb.append(sum%2);//转换后的数,转换为字符串
  13.                     }while((sum/=2)!=0);
  14.                     sb.insert(sb.length()-1, "1");//最高位添加1来获得32位二进制数。
  15.                     return sb.reverse().toString();//调用方法翻转字符串并转为String类型
  16.             }

  17. }
复制代码
注释里有地方不太理解。
这个方法貌似不太好,毕老师说负数2进制是该数正数按位取反再加1,但是按位取反可以,加1怎么搞?加1不就是10进制的1么? 怎么才能加二进制1?
没有头绪,有没有其他算法来转换。

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
举例说明-3的二进制算法:帮助楼主理解
0000 0000 0000 0000 0000 0000 0000 0011  =3
1111 1111 1111 1111 1111 1111 1111 1100  取反
0000 0000 0000 0000 0000 0000 0000 0001 +1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1111 1111 1111 1111 1111 1111 1111 1101 = -3

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
0x7fffffff
这货就是二进制的11111111-11111111-11111111-11111111
一个正数和这玩意异或就是
00000000-00000000-00000000-01011110(10进制的94,随便找了个数演示。)
11111111-11111111-11111111-11111111
——————————————————异或运算。不同为true即1,相同为false即0,其实就是按位取反了。
11111111-11111111-11111111-10100001就相当于取反了。
然后加1的问题……
16进制的1:0x00000001
8进制的1:00000001
10进制的1:00000001
2进制的1:00000001
11111111-11111111-11111111-10100001
00000000-00000000-00000000-00000001
————————————————————
11111111-11111111-11111111-10100010 负的94
加1……那就是加一嘛……不过你如果要进行字符串修改的话,那就比较麻烦了啊……得先把字符串搞成元素数组,然后判断尾巴上的数组,0就变1,1的话变0还得向前判断进位。

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
kuroro自走核炮 发表于 2014-4-23 21:08
0x7fffffff
这货就是二进制的11111111-11111111-11111111-11111111
一个正数和这玩意异或就是

果断是比较麻烦了。呵呵,理解了,谢谢
回复 使用道具 举报
taulinxinny 来自手机 初级黑马 2014-4-24 00:43:58
报纸
同样受教了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马