gpt4 book ai didi

c - 使用按位运算符在 C 中返回最负的二进制补码数

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:26 25 4
gpt4 key购买 nike

我在 C 中有一个函数应该返回最负的二进制补码数:

int mostNegTwosComp(void) {

return 0;
}

我只能使用最多 4 个按位运算符。这些运算符包括:! ~ & ^ | + << >> .我该怎么做呢?最负的二进制数是否取决于所选数字的位数?例如,10000 将是 16 位 int 的最负二进制数?

最佳答案

如果您不需要便携版本,您可以滥用整数几乎总是 4 个字节的知识。

return 0x80000000;

事实上,如果您知道要返回的类型的大小,就可以跳过按位游戏并使用以下格式作弊:

  1. 在0x__中,每个数字都是4位。这意味着2位数字是一个字节。
  2. 您希望第一个位为 1,所有其他位都为 0。
  3. 0x8 = 0b1000
  4. 因此,您可以将第一个字节之后的类型的每个字节的值表示为 0x80 + 2 个“0”。

但要回答你剩下的问题。

How would I go about doing this?

如果您正在制作模板,您(可能)会使用其他答案建议的按位技巧。否则,您可以使用上面的代码作弊或使用 limits.h (iirc) 中的定义。

~ (~0u >> 1);

将是一个可移植解决方案。

Wouldn't the most negative two's comp number be dependent on how many bits the selected number is?

最负二的恭维取决于包含变量的大小,所以我想你可以说“选择的数字”。事实上,值的范围取决于包含变量的大小。

For instance, 10000 would be the most negative two's comp number of a 16 bit int?

对于 16 位,最负的二进制数为 0x80000b1000000000000000-32768,具体取决于您的喜好代表。

关于c - 使用按位运算符在 C 中返回最负的二进制补码数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54526282/

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