进制之间的转换

进制介绍

对于整数,有四种表示方式:

二进制:0、1,满2进1,以0b或0B开头。

十进制:0-9,满10进1。

八进制:0-7,满8进1,以数字0开头表示。

十六进制:0-9及A(10)-F(15),满16进1,以0x或0X开头表示。此处的A-F不区分大小写。

举例说明 BinaryTest.java

//演示四种进制

//

public class BinaryTest{
 
 //编写一个main方法

 public static void main (String[]args){
 //n1 二进制
 int n1 = 0b1010;

 //n2 10进制
 int n2 = 1010;

 //n3 8进制
 int n3 = 01010;

 //n4 16进制
 int n4 = 0X10101;
 System.out.println("n1="+n1);
 System.out.println("n2="+n2);
 System.out.println("n3="+n3);
 System.out.println("n4="+n4);
 }
}

进制转换介绍

1.1二进制转换成十进制示例

规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。

案例:请将0b1011转成十进制的数。
0b1011 = 1 * 2的(1-1)次方+1 * 2的(2-1)次方+0 * 2的(3-1)次方+
1 * 2的(4-1)次方 = 1+2+0+8 = 11

 1.2八进制转换成十进制示例

规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。

1.3十六进制转换成十进制示例

规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。

2.1十进制转换成二进制

规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。9c0a2e6ea8c440bab77b6acac5cc20d3.jpg

 

 

2.2十进制转八进制

规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。

2.3十进制转换成十六进制

规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。

3.1二进制转换成八进制

规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。

案例:请将0b11010101转成八进制

0b11(3)010(2)101(5)=>0325

3.2二进制转换成十六进制

规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可。

案例:请将0b11010101转成十六进制

0b1101(D)0101(5)=>0XD5

4.1八进制转换成二进制

规则:将八进制数每1位,转成对应的一个3位的二进制数即可。

案例:请将0237转成二进制

02(010)3(011)7(111)=>0b10011111

4.2十六进制转换成二进制

规则:将十六进制数每1位,转成对应的一个4位的二进制数即可。

案例:请将0x23B转成二进制

0x2(0010)3(0011)B(1011)=>0b001000111011

十六进制与八进制之间转换可以通过二进制作为中间桥梁,也可以先转换为十进制再进行转换。 #### 以二进制为中间桥梁 - **十六进制转八进制**:先将十六进制数的每一位转换为四位二进制数,再把得到的二进制数从右到左每三位一组进行划分,最后将每组二进制转换为对应的八进制数。例如,十六进制数`2A`,`2`转换为二进制是`0010`,`A`(即十进制的10)转换为二进制是`1010`,组合起来是`00101010`,按三位一组划分成`010`和`101`,`010`转换为八进制是`2`,`101`转换为八进制是`5`,所以十六进制`2A`转换为八进制是`52`。 - **八进制转十六进制**:先把八进制数的每一位转换为三位二进制数,接着将得到的二进制数从右到左每四位一组进行划分,最后把每组二进制转换为对应的十六进制数。例如,八进制数`34`,`3`转换为二进制是`011`,`4`转换为二进制是`100`,组合起来是`011100`,按四位一组划分成`0001`和`1100`,`0001`转换为十六进制是`1`,`1100`转换为十六进制是`C`,所以八进制`34`转换为十六进制是`1C`。 #### 先转十进制转换 - **十六进制转八进制**:先将十六进制数按权展开相加转换为十进制数,再把十进制数通过除8取余的方法转换为八进制数。例如,十六进制数`1F`,转换为十进制为\(1\times16^1 + 15\times16^0=16 + 15 = 31\),将31转换为八进制,\(31\div8 = 3\cdots\cdots7\),\(3\div8 = 0\cdots\cdots3\),所以八进制是`37`。 - **八进制转十六进制**:先把八进制数按权展开相加转换为十进制数,再将十进制数通过除16取余的方法转换为十六进制数。例如,八进制数`27`,转换为十进制为\(2\times8^1 + 7\times8^0=16 + 7 = 23\),将23转换为十六进制,\(23\div16 = 1\cdots\cdots7\),\(1\div16 = 0\cdots\cdots1\),所以十六进制是`17`。 ### 代码示例(Python) ```python # 十六进制转八进制 hex_num = '2A' decimal_num = int(hex_num, 16) oct_num = oct(decimal_num)[2:] print(f"十六进制 {hex_num} 转换为八进制是 {oct_num}") # 八进制转十六进制 oct_num = '34' decimal_num = int(oct_num, 8) hex_num = hex(decimal_num)[2:] print(f"八进制 {oct_num} 转换为十六进制是 {hex_num}") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值