如何将数字转换成二进制表示呢?

第一次尝试:
我:二进制嘛,还不简单。对2取余一顿操作不就好了。于是代码如下:

 /*** 二进制转换* * @param n* @return*/private String parse(int n) {// n对2取余,若为1,则n-1除以2;若为0,则直接除以2,所得的数字重复这个步骤String result = "";while (n != 0) {if (n % 2 == 1) {n = (n - 1) / 2;result += "1";} else {n = n / 2;result += "0";}}StringBuilder str = new StringBuilder(result);return str.reverse().toString();}

测试下来,没什么问题,很开心嘿嘿嘿。
然鹅
测试到负数的时候我开始懵了。看来事情并没有想象中这么简单啊。
负数的二进制表示需要先求绝对值的二进制,然后取其反码再加1。于是有了第二次尝试,代码如下:

 /*** 二进制转换* * @param n* @return*/public String parse(int n) {String result = "";if(n > 0) {//正数result = positive(n);} else if(n < 0) {//负数result = inverse(positive(Math.abs(n) - 1));int j = 32 - result.length();for(int i = 0; i < j; i ++) {result += "1";}} else {return "0";}StringBuilder str = new StringBuilder(result);return str.reverse().toString();                    }/*** 取正数的二进制* @param n* @return*/private String positive(int n) {String result = "";while (n != 0) {if (n % 2 == 1) {n = (n - 1) / 2;result += "1";} else {n = n / 2;result += "0";}}return result;}/*** 硬核取反码(狗头)* @param str* @return*/private String inverse(String str) {String result = "";for (int i = 0; i < str.length(); i++) {if(str.charAt(i) == '0') {result += "1";}else {result += "0";}}return result;}

再次测试,负数结果正常,与toBanaryString方法结果相同,但是过程可以说非常不优雅,来看看源码是怎么写的。

 public static String toBinaryString(int i) {return toUnsignedString0(i, 1);}private static String toUnsignedString0(int val, int shift) {// assert shift > 0 && shift <=5 : "Illegal shift value";int mag = Integer.SIZE - Integer.numberOfLeadingZeros(val);int chars = Math.max(((mag + (shift - 1)) / shift), 1);char[] buf = new char[chars];formatUnsignedInt(val, shift, buf, 0, chars);// Use special constructor which takes over "buf".return new String(buf, true);}/*** 返回最高阶之前的0的个数,比如i=0,则返回32;i=1,则返回31;i是负数,则返回0.* 真的妙啊。几行代码就搞定**/public static int numberOfLeadingZeros(int i) {// HD, Figure 5-6if (i == 0)return 32;int n = 1;if (i >>> 16 == 0) { n += 16; i <<= 16; }if (i >>> 24 == 0) { n +=  8; i <<=  8; }if (i >>> 28 == 0) { n +=  4; i <<=  4; }if (i >>> 30 == 0) { n +=  2; i <<=  2; }n -= i >>> 31;return n;}
static int formatUnsignedInt(int val, int shift, char[] buf, int offset, int len) {int charPos = len;int radix = 1 << shift;int mask = radix - 1;do {buf[offset + --charPos] = Integer.digits[val & mask];val >>>= shift;} while (val != 0 && charPos > 0);return charPos;}

数字转成二进制,萌新向相关推荐

  1. 总结计算机中十进制数二进制数,计算机中十进制转换为二进制的新方法

    计算机,考试必备! 计算机中十进制转换为二进制的另一方法 -------"定位减权法" 胡燏 (四川建筑职业技术学院计算机系,618000) [摘要]本文从十进制与二进制的特点入手 ...

  2. Q1月活大涨70%,后浪会成B站的流量萌新吗?

    北京时间5月19日,B站对外发布了2020年第一季度财报.根据财报数据显示,B站 Q1总营收23.16亿,在营收上同比增长69%:截止5月18日美股收盘,B站股价已经上涨了80.77%. 今年以来,全 ...

  3. c++实现含有中文字符的字符串逆转,如:“我是小萌新”转换成“新萌小是我”

    一个中文字符占两字节,所以逆转也得两两字符进行逆转,如上图 可得出0和8,1和9,2和6,3和7进行下标交换 由此可得出以下代码: #include <iostream> #include ...

  4. php数字转化二进制,php 汉字转化成 二进制 十进制 十六进制 数字

    /** * 把一个汉字转为unicode的通用函数,不依赖任何库,和别的自定义函数,但有条件 * 条件:本文件以及函数的输入参数应该用utf-8编码,不然要加函数转换 * 其实亦可轻易编写反向转换的函 ...

  5. random_state的值如何选_算法萌新如何学好动态规划(3)

    本文是「动态规划」系列文章的第三篇,作为 算法萌新如何学好动态规划(2) 的一个延伸.本篇文章将主要聚焦于动态规划经典模型 -- 背包问题的讲解. 背包问题属于线性 DP 模型,之所以单独拎出来讲,主 ...

  6. (萌新笔记)python的复习笔记

    简介:python,作为我在暑假入门的第一门语言,我发现它特别简洁和实用,因此我想记录我的python学习过程,现在刚刚大一入门(我比较弱鸡,所以本文可能会有记录很多我初学时遇到的问题,还请大家斟酌观 ...

  7. 【萌新初学者】CodeWars战地笔记(JavaScript)

    最近发现了CodeWars这个网站,作为一个学习JavaScript的萌新,希望通过这个网站的练习来提升自己的代码水平.这篇文章是我在CodeWars解题以及浏览高赞答案时做的一些笔记,避免遗忘.笔记 ...

  8. 萌新的java学习之路——第一周

    萌新的java学习之路--第一周 第一周的学习 这是我学习Java的第一周,写这个博客更多的时为了总结自己这一周的学习情况,如果有人看到我写的博客,有什么问题的话,可以问我.虽然我也是一个小白,但我会 ...

  9. (萌新笔记)C++与C的不同

    本文设计到的C++知识比较浅薄,只适用于学过一些C语言并想大致看看C++的伙伴 一.引入概念字面量(我知道C语言有,但我那时还没学 定义:字面量(literal)是用于表达源代码中一个固定值的表示法( ...

最新文章

  1. Failed to start mongod.service: Unit mongod.service not found
  2. php 控制器自动,ThinkPHP 新建控制器
  3. 二叉树的一些leetcode题目+python(c++)
  4. Oracle自定义类型
  5. CyberArticle和Live Writer的比较
  6. hp服务器安装win7普通系统安装,hp台式电脑安装系统一键安装win7系统
  7. 基于winpcap的网络数据包的捕获与分析
  8. 编程控制网卡启用停用vbs版
  9. 群晖nas存储系统原理_群晖NAS入门教程第四节:群晖存储空间管理员功能和磁盘阵列类型的简介...
  10. FastJson jar包下载教程
  11. 适合程序员的英文名字
  12. Tomcat SSL配置 Connector attribute SSLCertificateFile must be defined when using SSL with APR解决 作者:孤风一
  13. python 城市地图_Python查询一个城市的谷歌地图的经度和纬度
  14. PMI-ACP敏捷项目认证练习题(四)
  15. ntfs文件系统服务器版,详解NTFS文件系统+NTFS 文件系统解析
  16. Proof of Stake - 股权证明 系列1
  17. 罗辑思维2017-2018跨年演讲摘要
  18. 大学一年级(行走的皮卡丘)
  19. vuepress-theme-reco@1.x 解决博客首页 与 仓库README不兼容问题
  20. 7-28 | 猴子选大王

热门文章

  1. Jenkins 安装部署
  2. Tiled Map(瓦片地图)
  3. uniapp学习API之——其他(授权、收货地址、发票抬头等)
  4. 文本溢出变成省略号可多行
  5. 新编组织行为学作业 (3)
  6. 图形是用计算机绘制的画面 也成矢量图,下列对图形和图像的描述,错误的是()。A图形也称为矢量图,几何变换后不失真B静态图像也称为位图, - 试题答案网问答...
  7. linux curl证书错误,curl服务器证书验证失败
  8. mysql 8.0 创建用户
  9. 【喜科堂】账户密码修改
  10. 【MATLAB教程案例40】语音信号的共振峰频率倒谱法估计matlab仿真学习