9.6华为OD机试真题 新系统 – 嵌入式传感器寄存器数据解析 (JavaPyCC++JsGo)
2026 华为OD机试真题9月6日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
系统从传感器的某个寄存器读取一个 32 位的 int 型整数 packet。请按如下要求解析输入数据,然后按十进制格式输出结果。
该数据的二进制结构定义如下:
- bit0(最低位):状态。1 表示传感器正常,0 表示传感器故障。
- bit1∼bit2:寄存器ID。0∼3。
- bit3:数据类型。1 表示变长数据类型,0 表示固定长度数据类型。
- bit4∼bit11:数据修正因子。
- bit12∼bit15:数据有效长度。0∼15,数据类型为 1 时才生效。
- bit16∼bit30:数据。数据类型为 1 时,从低到高依据数据有效长度确定实际有效数据位;数据类型为 0 时,全部为有效数据位。
- bit31:数据奇偶校验位:数据中的所有有效数据位与奇偶校验位中 1 的个数为偶数,表示数据校验通过;否则为不通过。
解析流程:
- 检查状态,如果传感器故障(状态为 0),返回 −1。
- 检查数据奇偶校验是否通过,不通过则返回 −2。
- 数据类型为 1 时,数据有效长度如果为 0,则返回 −3。
- 寄存器ID为 0 时:返回有效数据与数据修正因子按位与的结果。
- 寄存器ID为 1 时:返回有效数据与数据修正因子按位或的结果。
- 寄存器ID为 2 时:返回有效数据与数据修正因子按位异或的结果。
- 寄存器ID为 3 时:返回有效数据与数据修正因子按位同或的结果。
注:解析流程中 4、5、6、7 步骤的结果返回前需要和 0x0FFFFFFFF 取与。
2026 华为OD机试真题9月6日华为OD上机新系统考试真题 100 分题型
输入描述
输入为一个 32 位整型数值 packet。
输出描述
按十进制格式输出解析结果。
示例1
输入
343873
输出
4
说明
正常解析(寄存器ID=0,& 运算)。
输入:packet=0x00053F41(十进制 343873)。
二进制:0000 0000 0000 0101 0011 1111 0100 0001。
分析:
- bit0:1
- bit1∼bit2:00
- bit3:0
- bit4∼bit11:1111 0100
- bit12∼bit15:0011
- bit16∼bit30:000 0000 0000 0101
- bit31:0
解析流程:
状态检查:状态为 1,正常。
数据提取:数据类型为 0,实际数据为 0x0005。
奇偶校验:数据 0x0005(二进制 101)有 2 个 1。校验位为 0。总数 2+0=2(偶数),校验通过。
运算:寄存器ID为 0,执行与:0x05 & 0xF4。
- 0000 0101(5)
- 1111 0100(244)
- 结果:0000 0100 & 0x0FFFFFFFF=4(十进制)
输出:4。
示例2
输入
输出
-1
说明
输入:packet=0x00000000(十进制 0)。
二进制:0000 0000 0000 0000 0000 0000 0000 0000。
分析:
- bit0:0(表示异常)
返回:−1。
解题思路
核心思想
把输入整数先按 32 位无符号形式理解,再用“右移 + 掩码”直接提取各个字段。
需要注意三个校验顺序:
bit0为时,立即返回-1;- 按数据类型得到有效数据后,统计有效数据位和
bit31中1的个数,奇数返回-2; - 变长数据且有效长度为
时,返回-3。
通过校验后,根据寄存器 ID 对有效数据和修正因子做位运算,并将结果按 32 位有符号整数输出。
算法步骤
- 将
packet归一化为 32 位无符号值u。 - 分别提取状态位、寄存器 ID、数据类型、修正因子、有效长度、原始数据和校验位。
- 按规则完成状态、奇偶校验和变长长度校验。
- 根据寄存器 ID 执行按位与、或、异或、同或。
- 结果与
0xFFFFFFFF取与,再转换为 32 位有符号整数输出。
复杂度分析
- 时间复杂度:
O(1) - 空间复杂度:`O
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/886
文章版权归作者所有,未经允许请勿转载。
THE END