gpt4 book ai didi

从符号大小转换为二进制补码

转载 作者:太空宇宙 更新时间:2023-11-04 03:04:21 27 4
gpt4 key购买 nike

对于这个赋值,我只能使用基本的按位运算符而不能使用控制结构,所以到目前为止我已经想出了这段代码来将符号大小转换为 two's complement .

int sm2tc(int x) {
// Invert and add 1
// Problem: sm has 2 zeros.. 1000...000 & 0000...000
int tmin = 1 << 31;
int mask = x >> 31; // Determine sign of x
int mask2 = ~tmin; // Negate tmin to get 0111111...
int first = (x ^ mask) + (~mask + 1) ;
int second = first & mask2; // Turns of MSB
return second;
}

我哪里做错了?

最佳答案

所以,你真正想要计算的是

result = (x & sign_bit) ? -(x & ~sign_bit) : x;

但是当然不允许您使用控制结构。第一步是仅使用 +^ 运算符重写 -(x & ~sign_bit):(-1 ^ ( x & ~sign_bit)) - -1。现在请注意,如果 (x & sign_bit) 为零,则 (0 ^ (x & ~sign_bit)) - 0 等于 x。我们现在有

result = (x & sign_bit) ? (-1 ^ (x & ~sign_bit)) - -1 : (0 ^ (x & ~sign_bit)) - 0

然后您只需将 -10 替换为根据符号位生成这些值的 x 函数,并且你瞧,条件的两边变成了相同的表达式,条件就变得不必要了。

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

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