编程基础之进制表示以及相互转换

293 阅读4分钟

一、前言

在计算机编程中,了解各种进制及其表示方式是非常重要的。不同进制在计算机内部数据表示和存储中扮演重要角色。本文将介绍常见的进制,包括二进制、八进制、十进制和十六进制,以及它们之间的转换规则。


二、内容

2.1 概述

在计算机编程中,常用的进制有二进制(Binary)、八进制(Octal)、十进制(Decimal)和十六进制(Hexadecimal)。它们分别以不同的基数表示数字,表示方式如下:

  • 二进制(Base 2):逢二进一,使用0和1表示,以 "0b" 或 "0B" 作为前缀,例如:0b1010
  • 八进制(Base 8):逢八进一,使用0到7表示,以 "0" 作为前缀,例如:075
  • 十进制(Base 10):逢十进一,使用0到9表示,不需要前缀,例如:42
  • 十六进制(Base 16):逢十六进一,使用0到9和A到F(不区分大小写)表示,以 "0x" 或 "0X" 作为前缀,例如:0x1A

2.2 二进制说明

(1)计算机底层的存储方式

  • 在计算机内部,所有数字都以二进制形式存储。
  • 计算机使用电子电路,其中的开关状态表示二进制位(0或1)。
  • 这些二进制位组合在一起,形成数字、字符、图像等数据的表示方式。

(2)二进制数据的存储方式

  • 所有的数值,在计算机底层都以补码的方式存储。
  • 补码是一种用于表示有符号整数的编码方式,其中正数的补码与原码相同,负数的补码是对其原码取反后再加1。

(3)原码、反码、补码的说明

  • 原码:原码是数值的二进制表示,最左边的位是符号位(0表示正数,1表示负数),其余位表示数值的绝对值。
  • 反码:将对应正数的原码按位取反得到。
  • 补码:通过将反码加1得到。

正数的原码、反码和补码都是一样的,而负数的反码和补码不同于其原码。

2.3 进制间的转换

(1)图示

Decimal (十进制)	Binary (二进制)     Octal (八进制)     Hexadecimal (十六进制)
   0                00000000                00                0x00
   1                00000001                01                0x01
   2                00000010                02                0x02
   3                00000011                03                0x03
   4                00000100                04                0x04
   5                00000101                05                0x05
   6                00000110                06                0x06
   7                00000111                07                0x07
   8                00001000                10                0x08
   9                00001001                11                0x09
   10               00001010                12                0x0A
   11               00001011                13                0x0B
   12               00001100                14                0x0C
   13               00001101                15                0x0D
   14               00001110                16                0x0E
   15               00001111                17                0x0F
   16               00010000                20                0x10
   17               00010001                21                0x11
   ...               ...                    ...               ...

(2)二进制转换为十进制

二进制数转换为十进制数,可以将每位上的数字乘以相应的权值(2的幂次),然后相加得到十进制数。

例如:二进制数 1011 转换为十进制数

ans = (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0) 
	= 8 + 0 + 2 + 1 
	= 11

结果为 11


(3)十进制转换为二进制

十进制数转换为二进制数,可以使用除以2取余数的方法,从右向左获取每一位的二进制数字。

例如:十进制数 27 转换为二进制数

27 ÷ 2 = 13 余 1
13 ÷ 2 = 6 余 1
6 ÷ 2 = 3 余 0
3 ÷ 2 = 1 余 1
1 ÷ 2 = 0 余 1

将余数从下往上排列,结果为 11011


(4)二进制与八进制、十六进制间的转换

二进制与八进制、十六进制之间的转换相对简单。

可以将二进制数按照每3位(八进制)或每4位(十六进制)一组进行分组,然后转换为相应进制的数。

例如:

将二进制数 110110110 转换为八进制数:

110 110 110
6	6	6

转换结果为:666

将二进制数 110011001100 转换为十六进制数:

1100 1100 1100
C	C	C

转换结果为:CCC


三、总结

本文介绍了二进制、八进制、十进制和十六进制的概念及其表示方式。同时也简单的记录了进制间的转换规则,包括二进制到十进制、十进制到二进制,以及二进制到八进制和十六进制的转换。