【Java-进制】

本文详细介绍了计算机中的进制概念,包括二进制、十进制、八进制和十六进制,重点讲解了负数补码的由来及其必要性,并阐述了不同进制之间的转换方法。通过实例演示,理解了如何将二进制转换为十进制,反之亦然,以及二进制与八进制、十六进制的转换技巧。
摘要由CSDN通过智能技术生成

什么是进制

所有数字在计算机底层都以二进制形式存在。对于整数,有四种表示方式:

二进制(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开头表示。此处的A-F不区分大小写
如:0x21AF +1= 0X21B0

  		int num1 = 0b110;//输出显示为十进制6
        int num2 = 110;//输出显示为十进制110
        int num3 = 0127;//输出显示为十进制83
        int num4 = 0x110A;//输出显示为十进制4362

Java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位
当是long类型时,二进制默认占64位,第64位是符号位

>二进制的整数有如下三种形式
    原码:直接将一个数值换成二进制数。最高位是符号位
    如:1的源码是0000 0001       
    
    负数的反码:是对正数原码按位取反,只是最高位(符号位)确定为1。
    如-1:对1的源码的每一位进行取反,最高为确定为1为1111 1110。
    
    负数的补码:其反码加1。
    如果-1:反码+1 = 1111 1110 + 1 = 1111 1111。
计算机以二进制补码的形式保存所有的整数。
>正数的原码、反码、补码都相同(规定)
>负数的补码是其反码+1

负数的补码为什么要+1

我们首要先知道补码是先于反码出现的,反码的出现只是为了方便计算补码!

简易理解:

一个正数和它的负数相加必须等于0,以1为例:00000001+ 负1的反码(11111110)=11111111,显然不是0,需要再加00000001才是0。
所以(11111110+00000001)=11111111才是-1的补码。

深度理解:

以byte为例,在内存中是1字节=8bit,所以有8个位置存储数据,而从右到左第8位被规定为了符号位,0代表正数,1代表负数。
所以1在byte中的存储为00000001,按照逻辑逻辑-1应该是10000001。原本1+(-1)应该等于0,但是在二进制里显然不能用这个方法,
不然得到的就是10000010,是-2。所以按照逻辑二进制层面应该要用00000000-00000001才能得到-1的二进制。但是这就变成小减大,所以应该要借一位
变成100000000-00000001,这样就得到了-1的补码。但是计算机只会计算加法不会减法,那100000000只能用11111111+00000001来表示100000000,而byte只有8bit,所以最高位的1就被截断丢失了,就变成了00000000。所以-1的补码就是(11111111+00000001)-00000001了。
最后的公式就成了(11111111-00000001)-正数的二进制=负数的二进制补码。我们把括号去掉就变成了11111111-正数的二进制+00000001,
而11111111-正数的二进制刚好就是正数二进制的反码,这样就避免了减法!
所以负数二进制的补码=正数二进制的反码+00000001!

进制转换

二进制转换为十进制的方法

0000 0001是1, 0000 0010是2, 0000 0011是3, 0000 0100是4。我们会发现从右到左只要是0就是0,如果是1就代表了2^0, 2^1, 2^2, 2^3…依次类推
把0000 0110从右到左依次看做是2^0, 2^1, 2^2, 2^3… 依次类推,那第1位是0就是0,第二位满1就是2^1, 第三位满1就是 2^3,后面都是0了。
再把得出来的数字相加即0+2+4+0+0+0…=6。

十进制转换为二进制的方法

如果数字比较小,如130,就可以按130=128-2这样的方法快速求出对应的二进制编码,即0000 1000 0010。
如果数字比较大,可以采用除2取余的逆来得到二进制编码。

二进制与八进制的转换

8刚好是2的3次幂,所以把二进制的3个bit看成是八进制的1位就可以了,如011101001->011 101 001,每3位都是按20,21,2^2,所以八进制就是0351。
八进制转换为二进制一样的道理,351变成3,5,1。就是011 101 001。

二进制与十六进制的转换

与八进制同理,16刚好是2的4次幂,所以二进制的4个bit看成是十六进制的1位,如011101001-> 0000 1110 1001,每3位都是按20,21,22,23
所以十六进制就是0XE9。
十六机制转换二进制就是E,9->看成十进制14,9。转化为二进制0000 1110 1001。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值