一小时为什么写作 0xE10
程序员看时间戳,3600 秒常写成 0xE10。这个数按权展开就是十进制:14×256 + 1×16 + 0 = 3600。同一数值换八进制是 7020:7×512 + 0×64 + 2×8 + 0 = 3600——两条路径算出同一个数,这就是按权展开的恒等式:任意进制数 = Σ(数码 × 基数^位)。转完进制做一次展开验算,是最快的自查。
三种进制的分工
- 十进制:日常计算、人读数
- 十六进制:颜色值(#1A73E8)、内存地址、字节数据,两位正好表示一字节
- 二进制:位运算、权限掩码(rwx=111)、布尔组合
- 八进制:Unix 文件权限(755)、部分老系统接口
转换的两个易错点
十六进制混用字母数字时,A-F 是 10-15 不是字母本身:0xE10 的 E 是 14,初学者常当成 5。大数溢出也常见:32 位系统最大约 21 亿(0x7FFFFFFF),超过就回绕成负数,时间戳 2038 问题正是这么来的。
常见问题
- 为什么 0x 前缀不能省?
- 省了会被当十进制解析:E10 直接写会被判非法,0xE10 才是十六进制 3600。
- 负数怎么表示?
- 计算机用补码:8 位的 -1 是 0xFF,转十进制要看符号位约定。
- 手算怎么验算?
- 按权展开求和,与原值相等即正确——3600 的两条展开路径就是范例。
进制只是数字的外衣,按权展开一算,穿哪件都藏不住。