IEEE 754、字符集与 Unicode

共 52 题
#

1. htonl 与 ntohl 在小端机器上做什么?为何需要?

A 它们只在网络设备上使用,普通主机上不存在
B 它们把整数转换为 ASCII 字符串以便传输
C htonl 与 ntohl 完全相同,可以互换使用
D 在小端机器上 htonl 会反转字节顺序,在大端机器上是空操作,目的是统一到网络字节序 ✓ 正确答案
#

2. 把 struct { uint16_t a; uint32_t b; } 的内存布局在小端与大端下分别画出来?

A 字节序会改变结构体字段的先后顺序
B 小端序下多字节数值的低位字节存放在低地址,大端序下高位字节存放在低地址 ✓ 正确答案
C 大端序存储时数值的低位字节总在低地址
D 结构体字段之间不存在任何对齐问题
#

3. 给定 16 位 0x00FF 在 BE/LE 下字节序列分别是什么?

A 大端为 FF 00,小端为 00 FF
B 大端和小端都是 FF 00
C 大端和小端都是 00 FF
D 大端为 00 FF,小端为 FF 00 ✓ 正确答案
#

4. 给定 32 位整数 0x12345678,分别写出 BE 与 LE 字节序的字节序列?

A 78 56 34 12 ✓ 正确答案
B 21 43 65 87
C 12 34 56 78
D 87 65 43 21
#

5. 解释为何 x86/x64 是 LE、PowerPC(老)多为 BE,ARM 可配?

A x86 固定小端,老 PowerPC 多为大端,现代 AArch64 实际固定为小端 ✓ 正确答案
B 所有 ISA 都必须固定为小端
C ARM 永远是唯一支持大端的架构
D 字节序与体系结构无关,只由操作系统决定
#

6. 解释大端序(Big-Endian)与小端序(Little-Endian)的差异?

A 大端把小端序的每个字节内部再反转
B 两者读出的数值大小不同
C 大端把最高有效字节放最低地址,小端把最低有效字节放最低地址 ✓ 正确答案
D 大端序只用于 IEEE 754 浮点数
#

7. 解释网络字节序为何被定义为 BE?引用 RFC 1700 等?

A 网络字节序是小端序,因为 x86 是主流
B 网络字节序被标准化为大端序,由 RFC 1700 等规定,便于跨主机一致交换 ✓ 正确答案
C 网络字节序由每个主机自行决定
D 网络字节序仅用于 IPv6
#

8. 为何图像文件 BMP 是 LE、网络包 TCP/IP 头是 BE?

A BMP 用大端是因为它来自 Unix
B TCP/IP 头用小端是因为现代 CPU 都是小端
C BMP 面向 Windows/x86 平台用小端,TCP/IP 头为跨异构主机统一而用大端 ✓ 正确答案
D BMP 与 TCP/IP 头的字节序相同
#

9. 把 IEEE 754 单精度 1.0 写入二进制文件后用不同字节序读取,结果如何?

A 浮点数不受字节序影响,任何方式读取都是 1.0
B 1.0 位模式 0x3F800000 以小端写入后若用大端读回会得到错误的数值 ✓ 正确答案
C 浮点数在文件中永远按大端存储
D 只有 IEEE 754 浮点数才需要关注字节序
#

10. 设计一个示例用 ntohs 读取网络端口号 0x0050?

A ntohs 用于 32 位整数转换
B ntohs 会把主机序转成网络序
C 端口号在网络上总是以小端存储
D ntohs 是 16 位网络序转主机序函数,0x0050 转换后主机序数值为 80 ✓ 正确答案
#

11. IEEE 754 单精度与双精度的位布局分别是什么?符号、指数、尾数各占几位?

A 双精度:符号 1 位、指数 8 位、尾数 23 位
B 单精度:符号 1 位、指数 11 位、尾数 52 位
C 单精度:符号 1 位、指数 8 位、尾数 23 位 ✓ 正确答案
D 单精度与双精度指数位数相同
#

12. IEEE 754 标准的 RNE(round-to-nearest-even)舍入在 0.5 边界为何舍入到偶数?

A 0.5 边界总是向上舍入
B 0.5 边界总是向下舍入
C 0.5 边界舍入到偶数尾数,以避免长期统计偏差 ✓ 正确答案
D RNE 只在 IEEE 754 双精度中可用
#

13. 在 IEEE 754 单精度中,指数全 0、全 1 的特殊编码分别表示什么?

A 指数全 1 且尾数非 0 表示 Inf
B 指数全 0 且尾数非 0 表示 subnormal 数 ✓ 正确答案
C 指数全 0 且尾数全 0 表示 NaN
D 指数全 1 且尾数全 0 表示 subnormal 数
#

14. 把 0xC1800000(IEEE 754 单精度)解析为十进制数?

A -16 ✓ 正确答案
B -1.5
C -128
D 16
#

15. 把十进制 6.625 用 IEEE 754 单精度表示,按符号/指数/尾数拆分并写出十六进制位模式?

A 0x40D80000
B 0x40D40000 ✓ 正确答案
C 0xC0D40000
D 0x40E40000
#

16. 给定十六进制 0x7FC00000,写出其类型(NaN/Inf/normal)与符号?

A +Infinity
B NaN(符号位为 0) ✓ 正确答案
C -Infinity
D 一个 normal 负数
#

17. 解释为何 IEEE 754 用偏置指数(单精度 +127、双精度 +1023),而不是补码或符号-绝对值?

A 偏置指数只用于双精度
B 用偏置是为了支持负数指数的补码表示
C 偏置指数使浮点位模式无法直接比较
D 可以简化浮点比较,并让全 0/全 1 保留给特殊值 ✓ 正确答案
#

18. 为何 IEEE 754 把 +0 与 -0 区分开来?两者的比较运算结果为何相等?

A +0 与 -0 数值相等,但符号位保留,与某些运算(如 1/(-0)=-Inf)保持数学连续 ✓ 正确答案
B +0 与 -0 在比较时不等
C -0 是非法编码
D +0 与 -0 完全无法区分
#

19. 定点数 Q15/Q31 各自表示的小数范围与精度?

A Q15 精度为 2^-15,Q31 精度为 2^-31 ✓ 正确答案
B Q31 的精度是 2^-15
C 两者范围都是 -32768 到 32767
D Q15 精度比 Q31 高
#

20. 定点数 Q7.8 能表示的范围与步长分别是多少?

A 步长为 2^-8 ≈ 0.0039,范围约 -128 到 127.99 ✓ 正确答案
B 步长为 2^-7
C 范围约 -1 到 1
D 共 32 位
#

21. 把十进制 0.5 表示为 Q15(int16)时,如何写出位模式?

A 0x4000 ✓ 正确答案
B 0x2000
C 0x8000
D 0x0001
#

22. 给定 1.234567 元(精度 6 位小数),用 DECIMAL(19,4) 存储会损失几位?

A 0 位
B 1 位
C 2 位 ✓ 正确答案
D 3 位
#

23. 解释 IEEE 754 中 0.1 + 0.2 ≠ 0.3 的根本原因与定点方案如何避免?

A 是因为 0.1 和 0.2 在二进制中无法精确表示,产生舍入误差 ✓ 正确答案
B 是因为 CPU 浮点运算有 bug
C 是因为 C 语言编译器错误
D 只有 JavaScript 才会出现该问题
#

24. 解释为何金融系统偏好定点小数(DECIMAL)而非 IEEE 754 双精度?

A DECIMAL 能精确表示十进制小数,避免二进制浮点误差 ✓ 正确答案
B 双精度速度太慢
C 双精度占用内存太多
D DECIMAL 支持指数运算
#

25. 设计用整数(最小单位 1 分)存储金额的表结构,列出优缺点?

A 能直接表示任意小数
B 自动完成元分换算
C 节省数据库连接
D 精确、无浮点误差、运算快速 ✓ 正确答案
#

26. 给定 999999999999.9999(DECIMAL(18,4)),能存入吗?边界如何?

A 能,整数部分 12 位 ≤ 14 位上限 ✓ 正确答案
B 不能,整数位超限
C 不能,小数位超限
D 能,但会丢失精度
#

27. ASCII 与 Latin-1(ISO-8859-1)的位宽与覆盖范围?

A ASCII 是 7 位,Latin-1 是 8 位且前 128 位与 ASCII 兼容 ✓ 正确答案
B ASCII 是 8 位,Latin-1 是 7 位
C 两者都覆盖中文字符
D Latin-1 与 ASCII 完全无关
#

28. UTF-16 中 U+4E2D(中)的编码是 0x4E 0x2D 还是 0x2D 0x4E?

A 0x4E 0x2D
B 0x2D 0x4E ✓ 正确答案
C 0x4E 0x2D 0x00 0x00
D 0xE4 0xB8 0xAD
#

29. UTF-16 中 😀(emoji)的字节序列与 UTF-8 字节序列差异?

A 1F 60 00
B 3D D8 00 DE
C F0 9F 98 80 ✓ 正确答案
D FE FF 1F 60
#

30. UTF-8 中字节 0xC0 与 0xC1 为何被禁止?

A 它们会构成过长编码,破坏编码唯一性,可能被用于安全绕过 ✓ 正确答案
B 它们不是合法字节值
C 它们用于表示控制字符
D 它们与 BOM 冲突
#

31. UTF-8 编码中 0xE4 0xB8 0xAD 对应的 Unicode 码点是多少?

A U+6E2D
B U+4E1D
C U+4E2E
D U+4E2D(中) ✓ 正确答案
#

32. 解释 UTF-8 单字节区 0x00-0x7F 与多字节前缀 0xC0-0xF7、0x80-0xBF 的规则?

A 0x80-0xBF 是 leading byte
B continuation byte 可以出现在任意位置
C 0xF0-0xFF 都是 leading byte
D 0x00-0x7F 与 ASCII 兼容,0xC0-0xF7 为多字节 leading byte,0x80-0xBF 为 continuation ✓ 正确答案
#

33. 解释 UTF-8 的 leading byte 与 continuation byte 检测函数?

A (b & 0x80) == 0x00
B (b & 0xF0) == 0xE0
C (b & 0xE0) == 0xC0
D (b & 0xC0) == 0x80 ✓ 正确答案
#

34. 解释 Big-endian UTF-16 BOM(0xFE 0xFF)与 Little-endian BOM(0xFF 0xFE)的字节序识别?

A UTF-16BE
B UTF-16LE ✓ 正确答案
C UTF-8
D 无法判断
#

35. NFD 后的 é 字符(U+0065 U+0301)字节数与 NFC 的 U+00E9 字节数?

A 都是 2 字节
B NFD 2 字节,NFC 3 字节
C NFD 3 字节,NFC 2 字节 ✓ 正确答案
D 都是 3 字节
#

36. NFD、NFC、NFKD、NFKC 四种规范化形式的区别?

A NFC
B NFD
C 以上都不是
D NFKC/NFKD(兼容分解) ✓ 正确答案
#

37. 为何 emoji 👍(🏻 选择肤色)由 2 个码点组成?

A 它是错误编码
B 它需要 ZWJ 连接两个 emoji
C 基础 emoji + 肤色修饰符的组合模型,避免为每种肤色单独定义码点 ✓ 正确答案
D 它是代理对
#

38. 给定字符串 é + ́ + ́(base+两个重音符),NFD 与 NFC 各是什么码点序列?

A U+0065 + U+00E9
B U+00E9 + U+00E9
C 三个 U+0301
D U+00E9 + U+0301 ✓ 正确答案
#

39. 解释 Unicode Hangul 组合算法中的 L+V+T 合成规则

A 0x1100
B 0x11A7
C 0x1161
D 0xAC00 ✓ 正确答案
#

40. UTF-8 中 😀(U+1F600)的字节数与 char32_t 容量?

A 3 字节,char32_t 能容纳
B 4 字节,char32_t 能容纳 ✓ 正确答案
C 4 字节,char32_t 不能容纳
D 2 字节,char32_t 不能容纳
#

41. 解释“man + combining tilde”(NFD) → mañ(NFC)变体?

A "mañ\u0303"
B "man\u0303"(保持分解)
C "mañ"(U+00F1) ✓ 正确答案
D "máñ"
#

42. 解释 Unicode 码点(codepoint)、字素簇(grapheme cluster)、字形(glyph)三者的层次差异?

A 三者完全相同
B 码点是编码单位,字素簇是用户感知字符单位,字形是视觉形状 ✓ 正确答案
C 字形是编码单位
D 字素簇一定等于单个码点
#

43. 解释 combining character(如 ́ 重音符)与 base character 关系?

A 组合字符可独立显示
B 组合字符附着在基字符上共同构成一个字素簇,如 e+U+0301=é ✓ 正确答案
C 组合字符与基字符无关
D 组合字符没有码点
#

44. 在 Python struct.pack 中 < 与 > 前缀分别表示什么字节序?

A b'\x12\x34'
B b'\x34\x12' ✓ 正确答案
C b'\x34\x12\x00\x00'
D b'\x12'
#

45. 解释 NaN 的 payload(尾数部分非零)有何用途,举出 IEEE 754-2008 中规定的用法?

A NaN 尾数必须全 0
B signaling NaN 的尾数最高位为 1
C NaN payload 可携带诊断信息,IEEE 754-2008 区分 qNaN 与 sNaN ✓ 正确答案
D NaN payload 无任何用途
#

46. 解释 subnormal(denormal)数与 normal 数的分界点为何是 2^(-126) 与 2^(-1022)?

A 2^(-127)
B 2^(-1022)
C 2^(-149)
D 2^(-126) ✓ 正确答案
#

47. 解释 bigint 在 JavaScript 中可表示的最大整数与最小整数?

A 最大为 2^53-1
B 是任意精度整数,没有固定上限,仅受内存限制 ✓ 正确答案
C 与 Number 可以直接混合运算
D 只能表示正数
#

48. SQL 中 DECIMAL(p,s) 的 p 与 s 各代表什么含义?

A 8 位 ✓ 正确答案
B 2 位
C 10 位
D 任意
#

49. 解释 BMP(基本多语言平面)与辅助平面(astral plane)的码点范围?

A U+10000-U+10FFFF ✓ 正确答案
B 0x0000-0xFFFF
C 0x0000-0x10FFFF
D 0x110000-0xFFFFFF
#

50. UTF-16 中代理对(surrogate pair)的计算公式?

A DE00 D83D
B D800 DC00
C D83D DC00
D D83D DE00 ✓ 正确答案
#

51. 为何"家庭"等 emoji 序列(成员之间用零宽连接符 ZWJ 连接)会被视为一个 grapheme(字形簇)而非多个字符?

A ZWJ 使相邻 emoji 组成一个扩展字素簇,被视为单个用户可感知字符 ✓ 正确答案
B ZWJ 使 emoji 显示为多个独立字符
C ZWJ 是 emoji 的必需前缀
D ZWJ 会改变 emoji 的码点
#

52. 解释为何 U+2126(Ohm 符号)与 U+03A9(Omega)规范化后统一为 U+03A9?

A U+2126 是非法的
B 二者被定义为规范化等价,U+2126 的规范分解映射为 U+03A9 ✓ 正确答案
C 二者完全不相关
D 规范化会删除所有符号