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 的个数为偶数,表示数据校验通过;否则为不通过。

解析流程:

  1. 检查状态,如果传感器故障(状态为 0),返回 −1。
  2. 检查数据奇偶校验是否通过,不通过则返回 −2。
  3. 数据类型为 1 时,数据有效长度如果为 0,则返回 −3。
  4. 寄存器ID为 0 时:返回有效数据与数据修正因子按位与的结果。
  5. 寄存器ID为 1 时:返回有效数据与数据修正因子按位或的结果。
  6. 寄存器ID为 2 时:返回有效数据与数据修正因子按位异或的结果。
  7. 寄存器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 位无符号形式理解,再用“右移 + 掩码”直接提取各个字段。

需要注意三个校验顺序:

  1. bit0 为 时,立即返回 -1;
  2. 按数据类型得到有效数据后,统计有效数据位和 bit31 中 1 的个数,奇数返回 -2;
  3. 变长数据且有效长度为 时,返回 -3。

通过校验后,根据寄存器 ID 对有效数据和修正因子做位运算,并将结果按 32 位有符号整数输出。

算法步骤

  1. 将 packet 归一化为 32 位无符号值 u。
  2. 分别提取状态位、寄存器 ID、数据类型、修正因子、有效长度、原始数据和校验位。
  3. 按规则完成状态、奇偶校验和变长长度校验。
  4. 根据寄存器 ID 执行按位与、或、异或、同或。
  5. 结果与 0xFFFFFFFF 取与,再转换为 32 位有符号整数输出。

复杂度分析

  • 时间复杂度:O(1)
  • 空间复杂度:`O
THE END