首页 > 到底是char a 还是 int a ?

到底是char a 还是 int a ?

在stackoverflow上问问题的时候有人提醒我(ch=getchar())!=EOF里ch应该定义为int类型,然后看见有人说char的范围在不同系统上可能是-128~127也可能是0~255。这我就不不懂了。。char一直以来都都是有符号的么?


char
signed char
unsigned char

是三个不同的类型,第一个不保证是否有符号,后面两个保证

getchar由于可能返回EOF,也就是-1,所以他的函数声明是int getchar(),你需要用int接受,手动判断是不是-1,不是的话可以安全转为char类型


1: char 表示的范围
缺省的char 要么是signed char ,要么是 unsigned char ,到底是哪一种,这取决于编译器。这意味着不同机器上的char 可能拥有不同的范围。所以只有当程序所使用的char值位于有符号和无符号的交集,程序才是可移植的

2:

int ch;   // 最好写 int 
while( (ch = getchar()) != EOF )
       ;

在有符号机器上 程序可能正常运行
在无符号机器上,程序异常,循环将永远不会终止
EOF 为 int 类型,每次 ch 和 EOF 在比较时,都首先将ch 转换为 int类型进行比较

char  ch ;
while( (ch = getchar()) != EOF )

当你输入-1时,ch = 0xff; 将ch 提升为int ch = 0x000000ff;
而 EOF 的值为 0xffffffff, 所以循环不会终止

【热门文章】
【热门文章】