#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。请给我解释一下'not‘和'negation’operators.When之间的区别,不管我写什么程序,它们都是bug的源头。
while(i)我知道循环条件对于除0以外的正和负i都为真。
while(!i) vs while(~i)上面两个循环的'i‘值是多少?
发布于 2012-07-20 10:58:20
关于i == -1是退出条件的看法是正确的:您的循环等同于
int i=-5;
while(i != -1)
{
cout<<i;
++i;
}
// i == -1 immediately after the loop当以这种方式编写时,应该很清楚为什么不打印-1首先打印值,然后才递增,这就是为什么-2是您打印的最后一个值。
另一方面,!运算符仅在被赋予零值时才会生成1。这就是为什么在循环条件中使用!运算符时,循环会打印-1。
发布于 2012-07-20 11:22:55
'~‘是这样的运算符:~x = -x -1,当i=-1时,则~i = 0。如果你想知道~i的值,你可以把它们打印出来:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int i=-5;
for (int i = -5; i <= 3; i++)
{
cout<<i<<" "<<(~i)<<endl;
}
}然后你会发现:-5 4 -4 3 -3 2 -2 1 -1 0 0 -1 1 -2 2 -3 3 -4
发布于 2020-04-07 05:58:34
!为真/假逻辑翻转
!表示any nonzero becomes 0,0 becomes 1表示
eg1。!0b1010 -> 0b0000
eg2。!0b0000 -> 0b0001
eg3。!0b1111 -> 0b0000
泛化,out = in?0:1
虽然...
~是位翻转
~的意思是flip each and every bit
eg1。~0b1010 -> 0b0101
eg2。~0b0000 -> 0b1111
eg3。~0b1111 -> 0b0000
泛化,out = in^0b1111
https://stackoverflow.com/questions/11572181
复制相似问题