对于C/C++:
若为无符号整型,其结果为“模除 所能表示的最大值+1”,也就是俗语(当然不严格)说的“从低位开始截断”;
若为具符号类型,其结果未定义。
若为_Bool类型,非0即真,0即假
若为浮点类型,+-INF
--- 假如你是初学者,别往下看了,免得你看糊涂了 ---
C之所以规定“若为具符号类型,其结果未定义”,只是因为当时CPU种类多,没法规定而已,而不是为了“优化”。所以如果了知当前CPU架构,你可以写出这样的“未定义”代码,不用担心。这就是为了某些开源代码中这么用,但却没有人说它错的原因。
当初的目的虽非为了“优化”,但既然是“未定义”了,就可以用于“优化”,所以若你一定要用这样的“未定义”代码,你得避开一切可能的优化,比如 for( int i=1; 0<i; ++i )
i一直在自增,最后会变为负数,导致循环终止?不是所有的编译器上都如你所愿。因为C标准规定具符号类型溢出行为未定义,因此编译器可以认为i永不溢出,即将for( int i=1; 0<i; ++i ) 优化为 for( int i=1; ; ++i )