gpt4 book ai didi

c++ - 非(~)与否定(!)

转载 作者:IT老高 更新时间:2023-10-28 21:45:29 28 4
gpt4 key购买 nike

#include <iostream>

using namespace std;
int main(int argc, char *argv[])
{
int i=-5;
while(~(i))
{
cout<<i;
++i;
}

}

输出为 -5,-4,-3,-2。它不应该将值打印到-1吗?为什么只打印到-2。请解释一下“非”和“否定”运算符之间的区别。当我编写程序时,它们是错误的来源。

while(i)

我知道除了 0 之外的正负 i 的循环条件都是正确的。

while(!i) vs while(~i)

上面两个循环执行的'i'值是多少?

最佳答案

i-1时,~i的值为~-1,或0,所以 while 循环停止执行。 ! 操作符之所以有效,是因为它做了一些完全不同的事情;它会导致 1 用于 0 值和 0 用于所有其他值。 ~ 是按位取反。

更详细一点:

  • ~ 获取数字中的每一位并切换它。因此,例如,100102 将变为 011012
  • -1 二进制补码有符号整数时全为1。
  • ~0b…111111110

但是:

  • !01!anythingElse0
  • -1 不是 0
  • !-1 仍然是 0

如果你真的想循环包含 i == -1,只需使用 while (i) 而不是 while (~i).

关于c++ - 非(~)与否定(!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11572181/

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