java中常见的进制转换

回顾

10进制转2进制:整数部分除2取余法,小数部分乘2取整法和整数退位法。
2进制转10进制:原则是逢2进1, 0b1111 转换成10进制: 8+4+2+1=15;如果是8进制转10进制则是逢8进1, 0757 转换成10进制:7x64+5x8+7x1=495

关于叫法,十进制中 十位、百位、千位……
在二进制其实是 二位、四位、八位……其实挺好理解的。

总结:除k取余,乘k取整,逢k进1。然后2的倍数的进制,比如8进制和16进制,换算的时候,可以3位一算或者4位一算。小数位使用乘k取整可能出现计算很久都没结果,因为要算一个末尾为0的数出来,这时候可以使用整数退位法。

补充之java中进制表示:

  • java中2进制 0b1101(0b开头)
  • java中8进制 07(0开头)
  • java中16进制 0xf(0x开头)

2进制转16进制

1011 1101 1111 0101

2进制转16,原则是4位一算,用8 4 2 1累加,然后一一对应。
举个例子
0xf对应15,2进制表示 1111

所以0xbdf5

16进制转2进制

0xbdf5
4位一算其实蛮简单的, b d f 5,b在10进制中值为11,也就是1011,这就简单了
1011 1101 1111 0101

10进制转2进制

42 → (101010)2

在这里插入图片描述

0.125 → (0.001)2

在这里插入图片描述

补充知识:原码,反码,补码

注意:取反运算和反码不是一个概念

数值在计算机中是以补码的方式存储的。
一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1。
比如,十进制中的数+2 ,计算机字长为8位,转换成二进制就是[00000010]。如果是-2,就是[10000010]。因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数[10000010],其最高位1代表负,其真正数值是-2而不是形式值130([10000010]转换成十进制等于130)。所以将带符号位的机器数对应的真正数值称为机器数的真值。

  • 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
  • 反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上,符号位不变,其余各个位取反。
  • 补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上,符号位不变, 其余各位取反,最后+1。 (即在反码的基础上+1)

在这里插入图片描述

计算机使用补码的原因

  1. 被设计成只有加法没有减法,由于让计算机分辨符号位让基础电路设计变得复杂,所以出现反码。
  2. 然而用反码计算,出现了0这个特殊数值,0带符号是没有意义的。会有[0000 0000]和[1000 0000]两个编码表示0。于是设计了补码,负数的补码就是反码+1,正数的补码就是正数本身,从而解决了0的符号以及两个编码的问题: 用[0000 0000]表示0,用[1000 0000]表示-128。

参考

百度百科:进制转换

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值