【问题标题】:What's the use of '~' in C++? [closed]C ++中'〜'有什么用? [关闭]
【发布时间】:2012-10-21 02:29:34
【问题描述】:
#include<iostream.h>
void main()
{
   int x[]={1,2,3,4,5};
   for(int i=0;~i<5;i++)
      {    cout<<*x;
      }
}

当我运行这个程序时,控制台的显示有无数个 1。 我不明白这是怎么发生的。请帮我退出这个程序...... 是不是因为波浪号运算符,如果是原因,那怎么办?

【问题讨论】:

标签: c++ pointers loops


【解决方案1】:

~ 运算符是 BITWISE NOT 布尔运算符。所以你的循环是无限的,因为计数器是一个int32,而按位非的结果总是一个负数。

【讨论】:

  • "按位非的结果总是负数"真的吗?
  • 一般情况下并非总是如此,但在这种情况下绝对正确,因为计数器 i 从 0 开始并且是有符号整数类型。
【解决方案2】:

~ 运算符是按位非。由于 int 的带符号性质,按位 NOT 使数字为负数,小于 5。为您尝试做的事情摆脱它。

【讨论】:

    【解决方案3】:

    波浪号是按位逆运算符。所以〜0x00000000 = 0xFFFFFFFF或-1。增加 i 会使这个运行很长时间,几十亿次迭代。

    【讨论】:

      【解决方案4】:

      是的,这是由于位非运算符 (~) 和未定义的行为的组合。

      基本上,~i 将始终低于 5(嗯,在你的情况下低于 0),因为它会返回一个负数,i 的值大于 0。当您达到最大 int 数量时,i++ 将溢出并因此遇到未定义的行为。

      在此之前,您将打印 1,因为这是 *x 返回的内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-29
        • 2011-10-12
        • 1970-01-01
        • 1970-01-01
        • 2013-02-12
        • 1970-01-01
        相关资源
        最近更新 更多