到底是char a 还是 int a ?

查看:214
本文介绍了到底是char a 还是 int a ?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

在stackoverflow上问问题的时候有人提醒我(ch=getchar())!=EOF里ch应该定义为int类型,然后看见有人说char的范围在不同系统上可能是-128~127也可能是0~255。这我就不不懂了。。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, 所以循环不会终止

这篇关于到底是char a 还是 int a ?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆