gpt4 book ai didi

c - 数的否定

转载 作者:太空狗 更新时间:2023-10-29 16:01:51 24 4
gpt4 key购买 nike

int x=8; 
int k=~(x);

printf(%d",k)

输出:9

对它的解释是:

8= 00000000 00000000 00000000 00001000 
~8 = 11111111 11111111 11111111 11110111

我们以整数形式分配它,因此最高有效位 (MSB) 是符号位bcz MSB 为 1,因此它被视为 -ve no。当您尝试打印它时,然后在打印编译器之前将采用 2 的补码,因此它变成:(~8)=9 的 2 的补码11111111 11111111 11111111 11110111 的 2 的补码是 00000000 00000000 00000000 00001000 +1 = 1001 = 9

所以我的问题是,如果我们执行 k=-9 那么如果我们打印 k,它会打印 -9。什么时候需要 2 的补码

最佳答案

对您的问题的直接但高度技术性的回答是,当取反运算符对其进行运算时,取二进制补码作为整数值。

更通俗地说:整数的补码与其取反完全相同。

如果你写

-9

您得到 9 的二进制补码,即 -9。如果你写

-(-9)

您得到 -9 的二进制补码,即 9

由于您在问题中提到波浪号运算符 (~),让我们看一下。波浪号运算符是一个的补充,这是您“翻转每一位”时得到的结果。注意:

~(-3) = 2
~(-2) = 1
~(-1) = 0
~0 = -1
~1 = -2
~2 = -3

总的来说

~x = -x - 1

它们是不同的。使用- 表示补码,使用~ 表示补码。

许多人喜欢将其重写为

-x = ~x + 1

这给出了有关如何设计否定电路的提示。它的意思是“要找到一个数的负数(即它的二进制补码),你翻转每一位然后加 1”。

关于c - 数的否定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21037870/

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