gpt4 book ai didi

java - 从 16 位寄存器的 MSB 获取值

转载 作者:行者123 更新时间:2023-12-01 09:39:59 25 4
gpt4 key购买 nike

我有 16 位寄存器,其中包含 LSBMSB 中的一些值:

最低有效位:
位 0...1 处的值为 0
位 2 的值为 0

MBS:
在 MSB 我需要写入值 20

所以应该写入寄存器的值为0 + 0 + 20 = 160

当我阅读注册时,我正在这样做:

对于位 [0...1] 中的第一个值:

firstVal = (valFromReg & (((1 << 2)-1) << 1) / 2)  
secondVal = (valFromReg & 4) / 4

但是如何读取/转换第三个值以获得数字 20?

最佳答案

在 Java 中,short 是一个(带符号的)16 位值。您想将其分成 3 个值:

  • a是位0-1中的2位值
  • b是第2位中的1位值
  • c是第3-15位中的13位值

按位计算,可以这样表示:cccc cccc cccc cbaa

要从 16 位 reg 值中提取 3 个值,您需要执行以下操作:

short reg = /*register value*/;
int a = reg & 0x0003;
int b = (reg >> 2) & 0x0001;
int c = (reg >> 3) & 0x1fff;

要走另一条路,你可以这样做:

short reg = (short)((c << 3) | (b << 2) | a);

这当然假设这些值在值范围内,即 a = 0-3、b = 0-1 和 c = 0-8191。

关于java - 从 16 位寄存器的 MSB 获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38540644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com