栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java-进制】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java-进制】

Java-进制
  • 什么是进制
  • 负数的补码为什么要+1
  • 进制转换
    • 二进制转换为十进制的方法
    • 十进制转换为二进制的方法
    • 二进制与八进制的转换
    • 二进制与十六进制的转换

什么是进制

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

二进制(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。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862534.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号