关于char字符移位问题
2012-02-08 22:47
204 查看
看下面的代码,能够猜出输出结果吗?
char ch = (char)0x80;
ch >>= 7;
cout<<(((int)ch) & 0xFF)<<endl;
结果是255, 0XFF!unbelievable!,为什么呢,我作一点猜想,可能是由于编译器自身的考虑,char字符在移位的时间先将char 转换成整数,自然0x80转换成整数肯定是一个负数,所以在32位整数中前面24位肯定都是1,所以右移的时候就出现了补1的问题。
解决上面的方法是将char 改成 unsigned char,问题就解决了。
char ch = (char)0x80;
ch >>= 7;
cout<<(((int)ch) & 0xFF)<<endl;
结果是255, 0XFF!unbelievable!,为什么呢,我作一点猜想,可能是由于编译器自身的考虑,char字符在移位的时间先将char 转换成整数,自然0x80转换成整数肯定是一个负数,所以在32位整数中前面24位肯定都是1,所以右移的时候就出现了补1的问题。
解决上面的方法是将char 改成 unsigned char,问题就解决了。
相关文章推荐
- 关于char字符移位问题
- 关于char字符引发的一个问题
- 关于hibernate查询sqlserver时char类型只能取第一个字符的问题
- 关于char字符的占位问题
- 百度笔试题——找出程序中的错误(关于中文字符赋值给char时它是一个负数的问题),今天我是做错了!悲剧了!
- 关于SQL的char,varchar字段在导出时切断中文字符显示问号或乱码的问题[原创]
- 关于c#代码Convert.ToChar(null);出现异常,而object obj = null; Convert.ToChar(obj);//返回'\0'空字符问题详解
- 关于const char*和char*、const char** 和char** 赋值问题
- 关于RadioButton 适配移位的问题
- 关于CString剖析,“strcmp”: 不能将参数1从“CString”转换为“const char *”问题
- 转:关于使用fputc输出,文件结尾多一个字符的问题
- 删除相同字符问题---关于fgets
- 关于python中解决中文字符的问题
- 关于flex中RichTextEditor控件,监听Ctrl+s事件和去除Ctrl+s按下时在RichTextEditor生成的不可知字符的问题
- 关于char数组和字符串的一些问题
- 关于php内部编码与mysql字符差异问题的研究
- 关于记事本字符编码问题
- 关于Java中byte,short,char,int 之间相互赋值的问题
- Oracle 关于number类型转换to_char类型 存在的问题
- 关于移位词C语言做法的理解,以及对于字符字符串快排详解