Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么这会创建一个无限的负奇数列表?_C_Infinite - Fatal编程技术网

C 为什么这会创建一个无限的负奇数列表?

C 为什么这会创建一个无限的负奇数列表?,c,infinite,C,Infinite,如果i=1,为什么下面的指令会创建负数的无限列表(-1,-3,-5…) 原因是i--是后减量运算符。也就是说,在表达式中使用i的值,然后对表达式本身进行求值。这导致比较中i的值与print语句中的值不同,print语句构成无限循环 i--后减量操作,告知要使用的值 首先是表达式求值 --i预减量操作,它告诉表达式 首先求值,然后使用表达式的结果 原因是i--是后减量运算符。也就是说,在表达式中使用i的值,然后对表达式本身进行求值。这导致比较中i的值与print语句中的值不同,print语句构成无

如果i=1,为什么下面的指令会创建负数的无限列表(-1,-3,-5…)

原因是
i--
是后减量运算符。也就是说,在表达式中使用i的值,然后对表达式本身进行求值。这导致比较中i的值与print语句中的值不同,print语句构成无限循环

  • i--
    后减量操作,告知要使用的值 首先是表达式求值
  • --i
    预减量操作,它告诉表达式 首先求值,然后使用表达式的结果
  • 原因是
    i--
    是后减量运算符。也就是说,在表达式中使用i的值,然后对表达式本身进行求值。这导致比较中i的值与print语句中的值不同,print语句构成无限循环

  • i--
    后减量操作,告知要使用的值 首先是表达式求值
  • --i
    预减量操作,它告诉表达式 首先求值,然后使用表达式的结果
  • 请注意,上述副作用可能发生在表达式其余部分求值之前或之后(甚至在求值期间)


    请注意,上述副作用可能发生在表达式其余部分求值之前或之后(甚至在求值期间)。

    条件使用后减量。这意味着它测试
    i
    的原始值,即
    1
    ,然后将该值减至
    0
    。因为
    1
    是真实的,所以它进入循环

    在循环内部,打印
    --i
    。这是预减量,因此它将
    i
    设置为
    -1
    ,并打印该值

    在下一次迭代中,同样的事情发生了。它测试真实的
    -1
    ,将其递减为
    -2
    ,进入循环体,将其递减为
    -3
    ,并打印该值


    最后,当
    i
    溢出到最小负数以下时,代码将运行到未定义的行为。在大多数实现中,它将环绕并继续相同的进程,但实际行为不受语言的限制。

    条件使用后减量。这意味着它测试
    i
    的原始值,即
    1
    ,然后将该值减至
    0
    。因为
    1
    是真实的,所以它进入循环

    在循环内部,打印
    --i
    。这是预减量,因此它将
    i
    设置为
    -1
    ,并打印该值

    在下一次迭代中,同样的事情发生了。它测试真实的
    -1
    ,将其递减为
    -2
    ,进入循环体,将其递减为
    -3
    ,并打印该值


    最后,当
    i
    溢出到最小负数以下时,代码将运行到未定义的行为。在大多数实现中,它将环绕并继续相同的进程,但实际行为并不是语言所特有的。

    在每次迭代中,我将递减2次,这就是序列1、-1、-3,依此类推。始终为正值,这将导致无限循环。若你们选择i=2,那个么级数将是2,0,仅此而已。在得到零之后,循环将退出。

    在每次迭代中,我将递减2次,这就是序列1、-1、-3,依此类推。始终为正值,这将导致无限循环。若你们选择i=2,那个么级数将是2,0,仅此而已。在得到零后,循环将退出。

    i
    似乎属于
    int
    类型,并且是一个带符号整数,它也覆盖负范围

    该标准要求
    int
    必须能够表示至少一系列
    −32767
    32767

    如果减小该值,则该值可以降到
    INT\u MIN

    如果在到达
    INT\u MIN
    的边界后减小该值,则该行为未定义

    i
    在每次迭代中被
    2
    递减,因此输出显示出2个步骤的减少

    如果循环是无限的,则取决于实现如何处理
    INT\u MIN
    之后的递减


    只要
    i
    为非零,
    while
    条件始终为真,这里的情况就是这样的,
    i
    在第一次迭代时被减2,此后,
    i
    也是负的。

    i
    似乎属于
    int
    类型,并且是一个带符号的整数,它也覆盖了负范围

    该标准要求
    int
    必须能够表示至少一系列
    −32767
    32767

    如果减小该值,则该值可以降到
    INT\u MIN

    如果在到达
    INT\u MIN
    的边界后减小该值,则该行为未定义

    i
    在每次迭代中被
    2
    递减,因此输出显示出2个步骤的减少

    如果循环是无限的,则取决于实现如何处理
    INT\u MIN
    之后的递减


    只要
    i
    为非零,
    while
    条件始终为真,这里就是这种情况,因为
    i
    在第一次迭代时递减2,此后
    i
    也是负的。

    因为从奇数2中减去2,在大多数实现中它永远不会为零

    while (i--)
      if(i & 1) printf("\n%i", i);
    

    将在某个点停止。

    因为从奇数2中减去2,所以在大多数实现中它永远不会为零

    while (i--)
      if(i & 1) printf("\n%i", i);
    
    将在某个点停止。

    没有任何错误
    while (i--)
      if(i & 1) printf("\n%i", i);