C和指针,char扩展int 以及EOF的问题!
2014-03-17 13:45
246 查看
最近看了C和指针,70页下面小字提出了一个有趣的问题,经翻阅资料,做出以下愚见:
首先,EOF在头文件里面定义为-1,指的是文件末尾的信号。
当为有符号字符集时,输入\377,截取后8位即11 111 111,然后又扩展为int,因为是有符号字符,所以按高位扩展,即为全1(32个1),众所周知,电脑存储负数是按照补码存储的,所以当与EOF进行比较时,全1int要通过反向运算(即减1,然后高位不变各位取反),得到的就是-1,等于EOF,所以循环终止。
当为无符号字符集时,前面截取都一样,只是扩展为int时,因为是无符号字符,所以扩展位全为0,即000.....11 111 111,很明显,绝逼是个正数,不可能等于-1,所以将永远循环下去!
首先,EOF在头文件里面定义为-1,指的是文件末尾的信号。
当为有符号字符集时,输入\377,截取后8位即11 111 111,然后又扩展为int,因为是有符号字符,所以按高位扩展,即为全1(32个1),众所周知,电脑存储负数是按照补码存储的,所以当与EOF进行比较时,全1int要通过反向运算(即减1,然后高位不变各位取反),得到的就是-1,等于EOF,所以循环终止。
当为无符号字符集时,前面截取都一样,只是扩展为int时,因为是无符号字符,所以扩展位全为0,即000.....11 111 111,很明显,绝逼是个正数,不可能等于-1,所以将永远循环下去!
相关文章推荐
- Char转为int时高位符号扩展的问题
- char *输出的问题,以及指针的问题
- 关于int类型指针和char类型指针相互转换问题
- 泛型编程(模板函数,模板类的套用) Myvector 具体案例 实现可存放int 数组 char数组 类对象数组 以及一组指针
- Char转为int时高位符号扩展的问题
- char 转换为int时高位扩展的问题
- Char转为int时高位符号扩展的问题
- Char转为int时高位符号扩展的问题
- Char转为int时高位符号扩展的问题
- 对char * const *(*next)(); char * (*c[10])(int **p)的理解从而引发的对函数指针的理解以及const修饰符的用法理解
- int,char,long,long long,指针字节数。
- 指针与数组的区别,以及指针的空间开辟问题
- char数组和指针与CString之间的赋值问题
- 32和64位系统占的字节(int char long double 指针等)
- [每月一题] 全排列的生成方法以及扩展问题
- Myeclipse工作空间打开时保错说空指针以及Tomcat项目无法部署的问题解决
- 关于野指针,freopen重定向以及cin的简单c++问题
- DataBinding中的include的用法以及include 引起的空指针问题。
- 转载:CString及Char指针和数组的问题
- 验证码小练习强制将int类型转化为char类型遇到的小问题