目录
2进制
权位法
逢2进1的计数规则。
package demo;
public class Demo01 {
public static void main(String[] args) {
/*
* 2进制演示
*/
int n = 50;
// 00000000 00000000 00000000 00110010
System.out.println(n); //"50"
//println 底层调用了 Integer.toString()
//toString 方法将2进制转换为10进制字符串
//toBinaryString(n) 将数字n在内存中的
//实际2进制进行输出, 输出时候高位的0被自动省略
System.out.println(
Integer.toBinaryString(n));
for(int i=0; i<=100; i++) {
System.out.println(
Integer.toBinaryString(i));
}
//选取其中的25个手工计算其10进制值
n = 50;
n++;
System.out.println(n);
}
}
补码
什么是补码:计算机中将固定位数2进制分一半作为"负数"的编码规则称为补码。
- 为什么使用补码:
1. 补码编码目的是解决"负数"的编码问题。
2. 使用补码和很好的处理负数。
- 用4位讨论补码:
1. 固定位数:4位, 任何计算其结构始终保持4位数, 多余位自动溢出.
2. 高位为1的作为负数使用, 高位为0的作为正数
3. 正数编码就是2进制值
4. 负数编码从正数倒推编码
5. 补码可以实现负数的计算
- 补码的计算:补码 = ~原码 + 1.(原码取反就是反码,1变0,0变1。反码没什么用,就是为补码服务的!注意此公式不适合最小数(唯一一个不适合的),例如4位的最小值-8的表示1000,取反再加1后值为本身!)
- 同理:原码 = ~补码+1.举例-3变为3,1101取反后0010,再加1为0011。
- 补码中-1的表示:全是1的二进制码(原码里全是1的是最大值),例如4位二进制码-1的表示:0b 1111。8位二进制码表示:0b 1111 1111。
- 如何快速读出补码:举例4位二进制码,先记住-1的表示0b 1111(全是1),举例0b 1010,看看在权位上少了几个1,权位为1的上面少了,权位为4的上面少了,所以一共少了的值为4+1=5。因为是比-1少的,再用-1减去这个值,就是补码所表示的数-1 - 5 = -6。
- 有补码(负数)的情况下:最大值 + 1 = 最小值。举例7 + 1 = -8(10进制)。二进制0111 + 0001 = 1000。
- 补码的问题
1. 固定范围, 不能超范围计算, 超范围计算自动溢出!
- 扩展位数, 扩大范围, 尽量避免超范围计算
2. 补码是计算机内部编码, 与人类交互时候转换算法转换.
- 利用API转换, 将补码转换为10进制(正数/负数)
2进制原码和补码之间的运算
- 举例我们使用计算器计算:50+1=51。而实际上计算机内部是这样计算的:
为什么使用16进制?
- 使用16进制作为2进制的简写(缩写)!
1. 2进制书写繁琐
2. 16进制可以将2进制进行缩写
3. 从最后一位开始, 每4位2进制数字,缩写为一个16进制数
2进制运算
(1)按位与计算
- 位与运算符 “&”
- 计算规则:两边都为1,结果才为1。
(2)按位或计算
- 位或计算符“|”
- 计算规则:有1则1。
(3)按位取反
- 取反运算符“~”
- 计算规则:1变0,0变1.
(4)按位异或
- 异或运算符“^”\
- 计算规则:相同为0,不同为1。
进制之间的相互转换
(1)2进制转换为10进制(常用)
- 举例说明:
2进制:0b 1011 1101
转换为10进制:.
- 低8位快速转换,把低8位的值背下来:
(2)8进制转换为10进制
举例说明:
8进制:0 7654
转换为10进制:
- 低4位快速转换,把低4位背下来:
(3)16进制转换为10进制
举例说明:0x 2af5
转换为10进制:
- 低4位快速转换,把低4位的值背下来:
(4)n进制转换为10进制
举例:...xyz
通用公式:
(5)2进制转换为8进制(常用)
- 三位一体法(421法)
(6)2进制转换为16进制(常用)
- 四位一体法(8421法)
(7)10进制转换为2进制
- 除2取余法
- 举例:123 转换为2进制为:ob 111 1011.
(8)8进制转换为2进制
- 三位一体(421法查表格)
- 举例:0 226转换为2进制为0b 010 010 110。
(9)16进制转换为2进制
- 四位一体法(8421查表格)
- 举例:0x 5a1f 转换为2进制为0b 0101 1010 0001 1111.
(10)10进制转换为8进制
- 除8取余法
举例说明:10进制226转换为8进制为0 342。
- 先转换为2进制,再转换为8进制。
举例说明:10进制先转换为2进制0b 11 100 010(除2取余法),再转换为8进制0 342(3位一体查表法)。
(11)10进制转换为16进制
- 除16取余法
举例说明:10进制226转换为16进制为0x e2。
- 先转换为2进制,再转换为16进制。
举例说明:10进制转换为2进制0b 1110 0010(除2取余法),再转换为16进制0x e2。(4位一体查表法)
(12)10进制转换为n进制
- 除n取余法
- 先转换为2进制,再转换为n进制。
最基础的一定要掌握牢靠,否则只会让人笑话!