0%

十进制二进制十六进制常用的数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
| 十进制 (Dec) | 二进制 (Bin, 8位) | 十六进制 (Hex) |
| --------- | ------------- | ---------- |
| 0 | 00000000 | 0x00 |
| 1 | 00000001 | 0x01 |
| 2 | 00000010 | 0x02 |
| 3 | 00000011 | 0x03 |
| 4 | 00000100 | 0x04 |
| 5 | 00000101 | 0x05 |
| 6 | 00000110 | 0x06 |
| 7 | 00000111 | 0x07 |
| 8 | 00001000 | 0x08 |
| 9 | 00001001 | 0x09 |
| 10 | 00001010 | 0x0A |
| 11 | 00001011 | 0x0B |
| 12 | 00001100 | 0x0C |
| 13 | 00001101 | 0x0D |
| 14 | 00001110 | 0x0E |
| 15 | 00001111 | 0x0F |
| 16 | 00010000 | 0x10 |
| 17 | 00010001 | 0x11 |
| 18 | 00010010 | 0x12 |
| 19 | 00010011 | 0x13 |
| 20 | 00010100 | 0x14 |
| 32 | 00100000 | 0x20 |
| 64 | 01000000 | 0x40 |
| 128 | 10000000 | 0x80 |
| 255 | 11111111 | 0xFF |

👉 规律记忆:

1 个十六进制位 (0~F) = 4 个二进制位

2 个十六进制位 (00~FF) = 1 个字节 (8 bit)

常用的 0x0A=10, 0x10=16, 0x40=64, 0x80=128, 0xFF=255

十六转十:高位乘以16+低位


1️⃣ 有符号 Byte 的表示

总共有 8 位二进制:

b7 b6 b5 b4 b3 b2 b1 b0


b7 是 符号位(最高位)

0 → 正数

1 → 负数

b6~b0 是数值位(7 位)

范围:-128 ~ 127

最小值:1000 0000 → -128

最大值:0111 1111 → 127

2️⃣ 二进制例子
十进制 二进制(8位) 说明
0 0000 0000 中性值
1 0000 0001 正数
127 0111 1111 最大正数
-1 1111 1111 负数(补码表示)
-128 1000 0000 最小负数

“无符号”是二进制和计算机数据里一个非常重要的概念
1️⃣ 有符号数 vs 无符号数
✅ 有符号整数(Signed)

可以表示 正数、负数和零

例如 8 位(1 个字节):

范围:-128 ~ 127


第一位是 符号位:

0 = 正数

1 = 负数

✅ 无符号整数(Unsigned)

只能表示 非负数(0 或正数)

例如 8 位:

范围:0 ~ 255


所有 8 位都用来表示数值,没有符号位

因此最大值比有符号数大了一倍

2️⃣ 为什么要用无符号?

有些硬件或协议数据永远不会为负,比如:

电压值、温度传感器、PWM占空比

设备计数器、PID 输出值

使用无符号数可以 表示更大的范围,同样字节数存更多信息

3️⃣ 举例
类型 二进制 十进制
有符号 Int8 11111111 -1
无符号 UInt8 11111111 255

同样一个字节,解释方式不同,数值完全不同。

4️⃣ 在 Kotlin 里

Kotlin 没有原生 UInt16/UInt32(早期版本),所以我们用 Int 或 Long + 位运算 来表示无符号数:

val value = ((this[offset].toInt() and 0xFF) or ((this[offset+1].toInt() and 0xFF) shl 8))


and 0xFF 就是把 字节转成无符号

避免 Kotlin Byte 被当作 -128~127 的有符号数

5️⃣ 一句话总结

无符号整数 = 永远 ≥0,没有负数,最大值比同样字节数的有符号数大一倍。