1874
1874
FE Engineer
桌游布道者
有粤语歌就不会有世界末日

谈一谈二进制

1874 - 2020-04-17 - 学习思考 / 数据结构
2020-4-17|最后更新: 2023-4-10|
type
Post
status
Published
date
Apr 17, 2020
slug
oslix7
summary
category
学习思考
tags
数据结构
创建时间
Apr 7, 2023 07:15 PM
更新时间
Apr 10, 2023 05:47 AM
password
icon
Task List

二进制与十进制之间的转换

十进制转换成二进制

取余法

public void test1() { String numstr = ""; int de = 31; while (de > 0) { int res = de % 2; //除2 取余数作为二进制数 numstr = res + numstr; de = de / 2; } System.out.println(numstr); //11111 }
十进制整数转换为二进制整数采用“除 2 取余,逆序排列”法。具体做法是:用 2 整除十进制整数,可以得到一个商和余数;再用 2 去除商,又会得到一个商和余数,如此进行,直到商为小于 1 时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

原理

假设十进制整数 A 化得的二进制数为abcde的形式,那么用上面的方法按权展开, 得 A=a(2^4)+b(2^3)+c(2^2)+d(2^1)+e(2^0) (后面的和不正是化十进制的过程吗) 假设该数未转化为二进制,除以基数2A/2=a(2^4)/2+b(3^1)/2+c(2^2)/2+d(1^3)/2+e(2^0)/2 注意:e除不开二,余下了!其他的绝对能除开,因为他们都包含2,而e乘的是1,他本身绝对不包含因数2,只能余下。所以可以得到余数eA/2 - e/2 得到新的整数a(2^3)+b(2^2)+c(2^1)+d(2^0),然后 再除以基数2余下了d,以此类推。当这个数不能再被2除时,先余掉的e位数在原数低,而后来的余数数位高,所以要把所有的余数反过来写。正好是abcde

移位异或法

public void test2() { int num = 31; //定义一个String用于返回得到的二进制 String binary = ""; while (num > 0) { //获取每一位 int bit = num & 1; //将获取的位添加到字符串 binary = bit + binary; //向右移一位 num = num >> 1; } System.out.println(binary); }
这种位运算运用了一个特点:任何二进制数与 1 进行与运算都会得到其最低的低位有效位,即二进制数的最后一个数本身。所以让这个正整数与 1 进行与运算,再右移一位后把最后一位消除掉(整数/2),再进行如此的循环操作就可以得到这个正整数的每一位二进制数,因为先运算的数位低,后运算的高,所以进行一个反向排列就可以得到该正整数对应的二进制数。
Webpack配置-图片优化阿里canal数据库命令总结