在很多系统中EOF的值都是-1,但是你用%d显示它的话就只能看到-1,如果你用%X格式符再试试,就会发现显示出来的结果是FFFFFFFF(在Visual C++ 6.0环境下),这是因为在计算机里负整数是以“补码”的形式保存的(关于“原码”、“反码”、“补码”的概念此处不再赘述),所以看上去很小的一个“-1”,却要占用32个二进制位,这确实是char这个数据类型无法容纳的。
(不过,char类型却也能显示“自己的”-1,即FF,而且会显示成FFFFFFFF,这又是因为机器对补码补位造成的结果。也就是说对机器内部而言:char当中存放的-1实际上是FF,而EOF实际上是FFFFFFFF,这显然是不同的。)
另外,在不同的系统当中,EOF的值也未必就是-1,但总之它不是一个在char类型取值范围内的数。