在C中查找char的最大值

Finding max value of char in C

我通过简单的加法和测试数字何时变为负数来找到 char 的最大值:

#include<stdio.h>

/*find max value of char by adding*/
int main(){
  char c = 1;

  while(c + 1 > 0)
    ++c;

  printf("Max c = %d\n",(int)c);  /*outputs Max c = -128*/
  return 0;
}

while 循环提前测试,所以第一次 c+1 为负时它会中断,我们打印 c 的值。但是,程序输出的是负数!

为什么这个程序没有输出127

while 条件中发生了隐式强制转换,这导致比较适用于整数而不是字符。

如果改成

while((char)(c + 1) > 0)
    ++c;

然后它将打印 127。

Signed integer overflow is undefined behavior。这意味着允许符合标准的 C 编译器将 c + 1 > 0 更改为 true,因为添加 "cannot" 会溢出。

这意味着您的程序可以合法地编译为无限循环。