数值运算拾遗
整型字面量与数值转化
整型字面量可以用下表的形式书写:
数字字面量 | 示例 | 十进制值 | 字符集合 |
---|---|---|---|
二进制 | 0b11110000 | 240 | 0 1 |
八进制 | 0o77 | 63 | 0 1 2 3 4 5 6 7 |
十进制 | 12345 | 12345 | 0 1 2 3 4 5 6 7 8 9 |
十六进制 | 0xff | 255 | 0 1 2 3 4 5 6 7 8 9 A B C D E F |
... |
对于人而言,为了沟通与交流,我们会默认采取十进制的方式进行计算,但在不同时代与领域,往往都会使用不同的编码进制规范,即使进制不同,但其数值往往都是等价的,因此我们会面临各种情况的进制转换。
十六进制数转换为十进制数
首先,如果要将十六进制数转换为十进制数,可以使用以下步骤:
- 将十六进制数的每一位数与它所在的位数权值相乘。
- 将每个乘积相加,得到最终的十进制数。
例如,将十六进制数 0x3F
转换为十进制数:
- 第一位数是 3,它的权值是 16^1 = 16,所以 3 × 16 = 48。
- 第二位数是 F,它的权值是 16^0 = 1,所以 F × 1 = 15。
- 将两个乘积相加,得到十进制数为 48 + 15 = 63。
十进制数转换为十六进制数
要将一个十进制数转换为十六进制数,可以使用以下步骤:
- 将十进制数不断地除以16,直到商为0为止。
- 将每次除法得到的余数倒序排列起来,得到的就是对应的十六进制数。
例如,将十进制数 255 转换为十六进制数:
- 首先将255除以16,得到商为15,余数为15,也就是十六进制数中的F。
- 然后将商15除以16,得到商为0,余数为15,也 就是十六进制数中的F。
- 因为商为0,所以此时转换结束。 最终得到的十六进制数为FF。
位运算
由于之前已经总结过一篇位运算的文章了:《原码、反码与补码的产生》,因此在此不做赘述,下面为位运算操作符对照表:
运算符 | 说明 |
---|---|
& 位与 | 相同位置均为1时则为1,否则为0 |
| 位或 | 相同位置只要有1时则为1,否则为0 |
^ 异或 | 相同位置不相同则为1,相同则为0 |
! 位非 | 把位中的0和1相互取反,即0置为1,1置为0 |
<< 左移 | 所有位向左移动指定位数,右位补0 |
>> 右移 | 所有位向右移动指定位数,带符号移动(正数补0,负数补1) |