gpt4 book ai didi

将二进制补码转换为符号数值

转载 作者:行者123 更新时间:2023-11-30 16:22:05 24 4
gpt4 key购买 nike

我需要仅使用运算符将​​ C 语言中的补码转换为符号数值

! ~ & ^ | + << >>

我的方法是找到符号:int 符号 = !(!(a>>31));

基本上,if sign == 1 。我想翻转数字并添加 1,否则只想显示数字。

问题是我不能使用任何循环、if 语句等。这就是我正在做的事情:

int s_M = ((((a+1)>>31)^sign)+1)&sign;

有什么建议吗?

最佳答案

来自http://graphics.stanford.edu/~seander/bithacks.html#IntegerAbs

int const mask = v >> 31;
unsigned int r = (v + mask) ^ mask;

给出绝对值(大小)。如果您想添加符号位,只需屏蔽和/或第 32 位:

unsigned int s_M = r | (v & 0x80000000);

或者,如果您正在寻找单衬:

unsigned int s_M = ((v + (v >> 31)) ^ (v >> 31)) | (v & 0x80000000);

关于将二进制补码转换为符号数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54566750/

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