我如何从符号大小转换为二进制补码。我不知道从哪里开始。任何帮助,将不胜感激。
我只能使用以下操作:!,~,|,&,^,+,>>,
/*
* sm2tc - Convert from sign-magnitude to two's complement
* where the MSB is the sign bit
* Example: sm2tc(0x80000005) = -5.
*
*/
int sm2tc(int x) {
return 2;
}
如果数字为负数,则可以通过从 0x80000000 中减去该数字,将有符号数值转换为二进制补码。这适用于使用二进制补码表示负值的机器上的 32 位整数,但如果该值为正数,则将导致二进制补码否定。二进制补码负数的右移将移入一个,我们可以利用它来制作一个掩码以在原始值或有符号数值负值到二进制补码负值的转换之间进行选择。
int sm2tc(int x) {
int m = x >> 31;
return (~m & x) | (((x & 0x80000000) - x) & m);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)