在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" 会溢出。
这意味着您的程序可以合法地编译为无限循环。
我通过简单的加法和测试数字何时变为负数来找到 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" 会溢出。
这意味着您的程序可以合法地编译为无限循环。