# 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 数
# 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 位
# 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 支持指数运算
# 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 冲突
# 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 字节
# 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 ✓ 正确答案
# 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 只能表示正数
# 49. 解释 BMP(基本多语言平面)与辅助平面(astral plane)的码点范围? A U+10000-U+10FFFF ✓ 正确答案 B 0x0000-0xFFFF C 0x0000-0x10FFFF D 0x110000-0xFFFFFF
# 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 规范化会删除所有符号