package com.yl.pdfdemo.day01;
/**
* @Author wfj
* @Date 2021/1/9
* @Description 进制之间的转换
* @Version 1.0
*/
public class BinaryTest {
public static void main(String[] args) {
/**
* 所有数字在计算机底层都是以二进制存在的
* 对于整数,有四种表示方式
* 二进制(binary) 0,1 满2进1,以0b或者0B开头
* 十进制(decimal) 0-9 满10进1
* 八进制(octal)0-7 满8进1,以数字0开头
* 十六进制(hex) 0-9及A-F,不分大小写,满16进1,以0x或者0X开头表示,
* 如 0X21AF + 1 = 0X21B0
*/
int num1 = 0b110;
int num2 = 110;
int num3 = 0127;
int num4 = 0X110A;
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
/**
* 原码,反码和补码
* 计算机底层区分正数和负数是以最高位即符号位来区分的,0开始代表正数,1开头代表负数
* 注意:计算机底层都是以补码的方式来存储数据的!!!!!
* 正数,原码,反码和补码都是一样的 比如(14) 00001110原码反码和补码都是这个
* 负数
* (-14)的原码为 10001110
* (-14)的反码 11110001
* (-14)的补码 11110010
* 反码,在原码的基础上,符号位不变,其他位取反
* 补码,在反码的基础上+1
* 给负数的补码,反推原码
*
* 10111011 -69的补码,怎么求原码
* 首先-1
* 10111010 -69的反码
* 再按位取反
* 11000101 -69的原码
*
* 例子
* byte b = (byte)(1 + 127) //结果为-128
* 为什么是-128呢,首先,java里常量的默认类型为int,所以1和127都是int类型
* 所以这里1和127都是4个字节,byte是1个字节
* 127+1 = 128
* int类型结果为00000000 00000000 00000000 10000000
* 强转为byte时,去掉的前面的3个字节为10000000就变成了-128
*
* 11111111 -127的原码
* 10000000 -127的反码
* 10000001 -127的补码
* -1即为128的补码
* 10000000 -128的补码
*/
byte b = (byte)(1 + 127);
System.out.println(b);
/**
* 1. 2进制转为10进制
* 00000011
* 转为10进制结果为3
* 计算公式为 2的0次方+2的1次方
*
* 2. 10进制转为2进制
* 计算公式:除2取余数的逆
* 13
* 13 / 2 = 6...1
* 6 / 2 = 3...0
* 3 / 2 = 1...1
* 1 / 2 = 0...1
* 补完0即为10110000
* 取逆为00001101
*
* 3. 2进制转为8进制
* 00011111
* 转为8进制,2的3次方等于8,所以每3位可以作为8进制的一位,即为037
* 计算公式
* 2的0次方+2的1次方+2的2次方等于7
* 2的0次方+2的1次方等于3
* 即结果为037
*
* 4. 8进制转为2进制
* 0327
* 其实这是个逆过程,把8进制的每1位拆成2进制的3位就可以了
* 7拆为3位为111
* 2拆为3位为010
* 3拆为3位位011
* 即结果为011010111
*
*
* 5. 2进制转为16进制
* 00011111
* 转为16进制,2的4次方等于16,所以每4位可以作为16进制的一位,即为0X1F
* 计算公式
* 2的0次方+2的1次方+2的2次方+2的3次方等于15即为F
* 2的0次方等于1
* 结果为0X1F
*
* 6. 16进制转为2进制
* 这也是个逆过程,将16进制每1位拆为2进制的4位就可以了
* 0XDF
* F可拆为1111
* D可拆为1101
* 即结果为1101111
*/
}
}
java--进制之间的转换
最新推荐文章于 2022-04-22 16:57:54 发布