gpt4 book ai didi

c++ - 如何使用位运算符清除位

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:21 25 4
gpt4 key购买 nike

我有兴趣学习如何清除位,以便我可以使用二进制值的一部分,而不是整个二进制值。我希望用它来从 IEEE 单精度浮点形式中获取带符号的位、指数和尾数。

但是,我对十六进制系统并不完全熟悉,我想知道是否可以得到您的帮助。

到目前为止,这是我的想法:有符号位 - 将二进制值按位与 0x100000000 以仅获取第一位

指数-将值左移一次,按位-和新值0xFF000000得到 指数的前八位

有效数 - 将值左移 23 次

由于其中每一个都需要对原始值进行处理,我还计划将该值存储到另一个寄存器中。这样,我仍然可以在不“伤害”原件的情况下对值(value)进行工作。带符号位、指数和符号的值将存储到单独的寄存器中。

最佳答案

注意:我正在为这个答案处理 IEEE-754 单精度浮点格式:

签名:并用 0x80000000 屏蔽您的号码。如果结果为 0,则数字为正,否则为负。指数:用 0x7F800000 AND 屏蔽您的数字,然后向右移动 23 位。尾数:AND-用 0x007FFFFF 屏蔽您的号码。

要了解我为什么使用这些数字,只需将每个掩码转换为二进制形式并将其放在 float 的二进制表示形式下:

SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM = format of a floating point number: S=sign,
E=exponent,
M=mantisa
10000000000000000000000000000000 = 80000000h (isolate sign bit)
01111111100000000000000000000000 = 7F800000h (isolate exponent, 8 bits)
00000000011111111111111111111111 = 007FFFFFh (isolate mantissa, 23 bits)

要将二进制数转换为十六进制数,只需将其排列成 4 位组并将每一组转换为十六进制数:

例如:

01111111100000000000000000000000 is arranged as:
0111 1111 1000 0000 0000 0000 0000 0000 which is translated into hex as this:
7 F 8 0 0 0 0 0

关于c++ - 如何使用位运算符清除位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20341560/

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