跳到主要内容

数值运算拾遗

整型字面量与数值转化

整型字面量可以用下表的形式书写:

数字字面量示例十进制值字符集合
二进制0b111100002400 1
八进制0o77630 1 2 3 4 5 6 7
十进制12345123450 1 2 3 4 5 6 7 8 9
十六进制0xff2550 1 2 3 4 5 6 7 8 9 A B C D E F
...

对于人而言,为了沟通与交流,我们会默认采取十进制的方式进行计算,但在不同时代与领域,往往都会使用不同的编码进制规范,即使进制不同,但其数值往往都是等价的,因此我们会面临各种情况的进制转换。

十六进制数转换为十进制数

首先,如果要将十六进制数转换为十进制数,可以使用以下步骤:

  1. 将十六进制数的每一位数与它所在的位数权值相乘。
  2. 将每个乘积相加,得到最终的十进制数。

例如,将十六进制数 0x3F 转换为十进制数:

  1. 第一位数是 3,它的权值是 16^1 = 16,所以 3 × 16 = 48。
  2. 第二位数是 F,它的权值是 16^0 = 1,所以 F × 1 = 15。
  3. 将两个乘积相加,得到十进制数为 48 + 15 = 63。

十进制数转换为十六进制数

要将一个十进制数转换为十六进制数,可以使用以下步骤:

  1. 将十进制数不断地除以16,直到商为0为止。
  2. 将每次除法得到的余数倒序排列起来,得到的就是对应的十六进制数。

例如,将十进制数 255 转换为十六进制数:

  1. 首先将255除以16,得到商为15,余数为15,也就是十六进制数中的F。
  2. 然后将商15除以16,得到商为0,余数为15,也就是十六进制数中的F。
  3. 因为商为0,所以此时转换结束。 最终得到的十六进制数为FF。

位运算

由于之前已经总结过一篇位运算的文章了:《原码、反码与补码的产生》,因此在此不做赘述,下面为位运算操作符对照表:

运算符说明
& 位与相同位置均为1时则为1,否则为0
| 位或相同位置只要有1时则为1,否则为0
^ 异或相同位置不相同则为1,相同则为0
! 位非把位中的0和1相互取反,即0置为1,1置为0
<< 左移所有位向左移动指定位数,右位补0
>> 右移所有位向右移动指定位数,带符号移动(正数补0,负数补1)