gpt4 book ai didi

c - 如何将 MSB 复制到字节的其余部分?

转载 作者:太空狗 更新时间:2023-10-29 15:25:59 28 4
gpt4 key购买 nike

在中断子程序(每 5 µs 调用一次)中,我需要检查一个字节的 MSB 并将其复制到该字节的其余部分。

我需要做类似的事情:

if(MSB == 1){byte = 0b11111111}
else{byte = 0b00000000}

我需要它来加快速度,因为它在中断子例程中,而且上面还有一些代码,所以效率很高。

因此,我不想使用任何 if、switch、select 或 >>> 操作数,因为我觉得这会减慢进程。如果我错了,那么我会走“简单”的路。

我尝试过的:

byte = byte & 0b100000000

这给我 0b100000000b00000000

但我需要第一个是 0b11111111

我想我在某处(加上其他门)缺少一个 OR。我不知道,我的直觉告诉我这应该很容易,但现在不适合我。

最佳答案

诀窍是为您的 byte 变量使用一个有符号类型,例如 int8_t,并利用 sign extension 特性右移操作:

byte = byte >> 7;

Demo.

右移速度非常快 - 在大多数现代(甚至不是那么现代)CPU 上只需一条指令。

这样做的原因是 >> 在有符号操作数上插入符号位在左边以保留其操作数的符号。这称为符号扩展

注意:从技术上讲,此行为是实现定义的,因此不是普遍可移植的。谢谢,Eugene Sh. , 评论和 reference .

关于c - 如何将 MSB 复制到字节的其余部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37218006/

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