java--进制之间的转换

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
         */
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值