c++ while(x) while(!x) 和while(~x)3者的区别 while(x++)和while(++x)的区别

c++\u91cc while(x)\u548cwhile(~x)\u7684\u610f\u601d\uff1f

while\u662fC++\u4e2d\u7684\u5faa\u73af\u8bed\u53e5\uff0c\u4e00\u822c\u683c\u5f0f\u4e3a\uff1a
while (\u8868\u8fbe\u5f0f) \u8bed\u53e5;while\u9996\u5148\u68c0\u67e5\u8868\u8fbe\u5f0f\u7684\u503c\u662f\u5426\u4e3a\u771f\uff08\u4e0d\u7b49\u4e8e0\uff09\uff0c\u5982\u679c\u662f\uff0c\u5219\u6267\u884c\u4e0b\u9762\u7684\u8bed\u53e5\uff1b\u7136\u540e\u7ee7\u7eed\u68c0\u67e5\u8868\u8fbe\u5f0f\u7684\u503c\uff0c\u6267\u884c\u8bed\u53e5\u76f4\u5230\u8868\u8fbe\u5f0f\u7684\u503c\u4e3a0.
\u6240\u4ee5while(x)\u7684\u610f\u601d\u662f\uff1a\u5982\u679cx\u4e0d\u7b49\u4e8e0\uff0c\u5219\u6267\u884c\u4e0b\u9762\u7684\u8bed\u53e5\u3002
~\u4e3aC++\u4e2d\u7684\u4e00\u4e2a\u8fd0\u7b97\u7b26\uff0c\u610f\u601d\u4e3a\uff1a\u5bf9\u5b83\u540e\u9762\u7684\u503c\u6309\u4f4d\u53d6\u53cd\uff0c\u6240\u4ee5\u8981\u4f7f~x\u7b49\u4e8e0\uff0c\u5c31\u8981\u4f7fx\u7684\u6240\u6709\u4f4d\uff08\u5305\u62ec\u7b26\u53f7\u4f4d\uff09\u90fd\u4e3a1.
\u6240\u4ee5while(~x)\u7684\u610f\u601d\u662f\uff1a\u5982\u679cx\u6709\u4efb\u4f55\u4e00\u4f4d\u4e0d\u662f1\uff0c\u5219\u6267\u884c\u4e0b\u9762\u7684\u8bed\u53e5\u3002

\u9996\u5148 ++x\u662f\u53d6\u5f53\u524dx\u7684\u503c\u81ea\u52a0\u4e00\u6b21\u7684\u503c\u4f5c\u4e3a\u7ed3\u679c \u800cx++\u662f\u53d6\u5f53\u524dx\u7684\u503c \u7136\u540ewhile()\u62ec\u53f7\u91cc\u9762\u9664\u4e860\u4e4b\u5916\u7684\u6570\u90fd\u4e3a\u771f\u503c\uff0c0\u4e3a\u5047\uff0c\u8fd9\u6837 int x=-10\uff1b
while(++x) cout<<x<<endl;
\u8fd9\u4e2a\u91cc\u9762\u6700\u591a\u4e3a-1\uff0c\u7b49\u4e8ex\u7684\u503c \u8f93\u51fa\u4e5f\u4e3a-1\uff1bint x=-10;
while(x++) cout<<x<<endl;
\u8fd9\u4e2a\u91cc\u9762\u867d\u7136\u6700\u5927\u4e5f\u4e3a-1\uff0c\u4f46x\u7684\u503c\u5374\u662f\uff08-1+1\uff09=0\uff1b
\u6240\u4ee5 \u4e0a\u9762\u7684\u7ed3\u679c \u660e\u767d\u6ca1 \u4e0d\u61c2\u5728\u89e3\u91ca

三者的区别,其实就是while里面的值什么时候为真的问题,与while本身没有什么关系。
while(x)在x为真时循环;while(!x)在x不为真时循环;while(~x)在对x二进制取反后值为真时循环。

while(x) 只要x的值不是0就执行循环
while(!x) 只要x的值是0就执行循环
while(~x) 只要x的二进制位取反,值不为0就执行循环。

1) while(x) x!=0 循环 x==0 退出
while(!x)=///until(x) x==0 循环 x!=0 退出

很多人纠结于C,C++没有直到型循环
实际上可以这样用
#define foruntil(x) (!(x))
for(e1;foruntil(e2);e3){}

#define until(x) while(!(x))

until(x){}
do{}until(x);

~0=0xFFFF FFFF=-1
~1=0xFFFF FFFE
~2=0xFFFF FFFD
~-1=~ 0xFFFF FFFF=0
while(~x) // x!=-1 循环 x==-1退出

举例说明:
int main(){
int a=0, b=5;
char c='g';
int tick=0;
while(a){cout<<"a"<<endl;tick++;if(tick>2){break;}}
tick=0;
while(!c){cout<<"!c"<<endl;tick++;if(tick>2){break;}}
tick=0;
while(~b){cout<<"~b"<<endl;tick++;if(tick>2){break;}}
return 0;
}
输出是:
a
a
~b
~b
因为:a=0;所以对应于boolean类型的true,执行循环;
c='g', 所以c!=0,!c对应于boolean类型的false,所以不执行循环,没有输出;
b=5,-----二进制下:b=101,按位取反为:~b=010,不是000,即不是十进制下的0,所以对应于boolean类型的true,执行循环,有输出。

扩展阅读:www.sony.com.cn ... sql and or ... xbox series x ... c# throw ... sql between and ... c# case ... c# switch ... cosnπx ... crx ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网