在C中查找char的最大值

时间:2016-07-25 19:54:15

标签: c char max limit ansi-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

2 个答案:

答案 0 :(得分:5)

在while条件中发生隐式转换,导致比较在int而不是chars上工作。

如果您将其更改为

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

然后它将打印127。

答案 1 :(得分:0)

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

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