C++ “~”如何在C中找到补语?

C++ “~”如何在C中找到补语?,c++,c,bitwise-operators,C++,C,Bitwise Operators,我问这个问题是因为我在Stack Overflow中发现了一个不使用减号“-”运算符来求差的示例 答案是差=a+~b+1 为什么+1?在c中,它是一个有点明智的NOT运算符。阅读: 是2的补1减法。要从3中减去2,计算机可以使用这个。假设您使用的是8位体系结构,那么:310=0000 00112和210=0000 00102。 现在取2的补码 现在取其2的补码,只需加1即可 1111 1101 + 1 = 1111 1110 现在将2的补码2与3相加 一,。说: 在大多数算术中,一个数的两

我问这个问题是因为我在Stack Overflow中发现了一个不使用减号“-”运算符来求差的示例

答案是差=a+~b+1


为什么+1?

在c中,它是一个有点明智的NOT运算符。阅读:

是2的补1减法。要从3中减去2,计算机可以使用这个。假设您使用的是8位体系结构,那么:310=0000 00112和210=0000 00102。 现在取2的补码

现在取其2的补码,只需加1即可

 1111 1101 + 1 = 1111 1110 
现在将2的补码2与3相加

一,。说:

在大多数算术中,一个数的两个补码的行为类似于原始数的负数,正数和负数可以自然地共存


你真的觉得这个问题显示了研究的努力吗;它是有用的和清楚的吗?提出一个问题本身就是一项研究工作。没有必要否决这个问题。有时人们可能无法找到结果。@P0W和Raymondchen Maxime Cogwheel Bаћ你们都是C语言的专家。我只是一个初学者。我想你们都是从我开始的地方开始的。你们都把问题搁置了。你也可以说些有助于回答我疑问的话。无论如何,我已经得到了答案。我真的很满意。一定要帮助提问者,而不仅仅是压制他们。这是一个简单而谦虚的建议,对你们所有人来说都是免费的,因为它会帮助你们将来帮助初学者。@MELWIN在寻求帮助之前,你们应该自己努力寻找。~的含义可以在任何一本关于C编程的书中找到。在Google中键入一元运算符,然后单击第一个或第二个链接。您也可以尝试tilde C,您会发现一个堆栈溢出问题。堆栈溢出规则规定OP必须显示研究成果。你没有。你也可以解释为什么a+~b+1等同于a-b;哦对现在编辑它。另外,作为参考,重要的是要提到,这假设了twos补码表示,因此它不是完全可移植的。尽管twos补码在几乎每个C实现中都使用,但您可以简单地说:在C中,它是一个稍微明智的not运算符,并留下一个链接来进一步解释,就像你做的那样。你最初的回答已经足够大声呼喊了。这是一个问题,毫无疑问
~(0000 0010) = 1111 1101
 1111 1101 + 1 = 1111 1110 
  0000 0011 
+ 1111 1110 
------------
1 0000 0001  = 1 in decimal. (3 - 2 = 1)
^
|
Carry Bit