
面试李组长为您分享以下优质知识
一个占有n位的二进制数可以表示有符号数和无符号数,具体区别如下:
一、无符号数表示
无符号数仅用于表示非负整数,其表示范围为:
$$0 leq text{数值} < 2^n$$
例如:
8位无符号数范围是$$0 sim 255$$
16位无符号数范围是$$0 sim 65535$$
二、有符号数表示
有符号数用于表示正数、负数和零,采用补码形式表示,其表示范围为:
$$-2^{n-1} leq text{数值} leq 2^{n-1} - 1$$
例如:
8位有符号数范围是$$-128 sim 127$$
16位有符号数范围是$$-32768 sim 32767$$
补码表示说明
首位为符号位(0表示正数,1表示负数),其余位表示数值。例如,+5的原码为00000101,-5的原码为10000101。
正数的反码与原码相同,负数的反码是原码除符号位外按位取反。例如,-5的反码为11111010。
反码加1。例如,-5的补码为11111011。补码的好处是简化加减法运算。
三、数位分配示例
以8位二进制为例:
无符号数:00000000表示0,11111111表示255
有符号数:00000000表示0,11111111表示-1(补码表示)
四、应用场景对比
| 类型 | 表示范围 | 适用场景 |
|------------|------------------------|------------------------|
| 无符号数 | 0-2ⁿ-1| 非负整数计数、颜色编码等 |
| 有符号数 | -2ⁿ⁻¹到2ⁿ⁻¹-1| 通用数值存储、算术运算等 |
总结
n位二进制数通过补码机制同时支持有符号和无符号数表示,具体使用需根据实际需求选择。无符号数适合非负场景,有符号数则适用于需要表示负数的场景。