char类型和short,int类型之类的转换
来源:互联网 发布:淘宝开通花呗条件 编辑:程序博客网 时间:2024/06/05 10:51
char类型和short,int类型之类的转换
今天偶遇一个printf输出小问题,代码如下:
#include<cstdlib>#include<cstdio>using namespace std;int main(){ chara=0xff; printf("%x",a&0xffff); system("pause"); return 0;}输出:ffff
初次分析如下:以为char只有一个字节,所以& short之后,补上前面的一个字节ff,所以为ffff.
但换成 char a=0x0f ,输出的是f。
而换成 unsigned char 如下:#include<cstdlib>#include<cstdio>using namespace std;int main(){ unsigned char a=0xff; printf("%x",a&0xffff); system("pause"); return 0;}输出:ff
分析:直到尝试无符号字符型,才想起来数据的范围,char的范围是-128~127,而unsigned char的范围是0~255. 所以在做 char & short(int) 操作或者直接使用printf(“%x”,a)时,会自动补位。printf(“%x”,a)可以输出指定参数的16进制形式,但是在实际的使用中,参数不一定都是32位的整数,有可能是16位的short,8位的char。所以它们在输出%x时,会自动补位。而补位的规则就是补符号位,因为char 最大的正值为7f(127),超过就会溢出,变成负数,符号位为1,所以前面补ffffff(变成int ),而7f 前面符号位是0 ,所以补24个0之后,输出7f。验证下:
所以char 转换成short ,int 都是同理,而short 转换成int 时也是同理,补符号位,验证如下:
所以在数据类型转换时,一定要考虑数据范围,以及有无符号
总结: 短字节的类型 转换成 长字节的类型时, 高位自动补齐 符号位(全0 或者全1)。而 长字节 转换成 低字节时,从低字节开始取。char 的底层存储是 整形的,所以 unsigned char 可以做byte (0`255)使用
另外 移位运算也是补符号位,例如 1<<31>>31, 最后会编成 ffffffff,因为1<<31.是80FFFFFF,所以右移时,高位也是自动补了符号位1,而不是想当然的补0;而左移位自动低位补0。
这里还要注意的是 : 比如int a=oxffff,这里其实符号位还是0的,但如果short a=oxffff,那符号位就是1了。
- char类型和short,int类型之类的转换
- short 和 int 类型的转换
- java可以做switch case的只有int类型,和可以自动类型转换为int的byte, char,short
- char/byte/short类型的加法和类型转换问题
- byte、short、char和int的转换
- 类型转换问题(java会把byte,short和char的运算操作转换为int类型即低精度自动向高精度转换)
- int类型与char类型的转换
- int类型与char类型的转换
- int short型类型转换
- char,short,int ,long , long long类型的范围
- int、short、char 类型超出范围赋值
- int类型和char类型的区别
- int和char数组之间类型转换
- Java中char和int类型的转换问题
- cout是如何处理char和int的类型转换
- int型和char型之间的类型转换
- cstring和相关类型的相互转换int,double,char*
- java学习---char和int的类型转换问题
- python from __future__ import division
- 模板配置对话框的创建
- List循环移除元素
- 预留空间环形队列使用总结
- 几行代码实现AJAX延迟请求
- char类型和short,int类型之类的转换
- 03-树3 Tree Traversals Again (25分)
- 利用Boost.Python实现Python C/C++混合编程
- TensorFlow实战15:TensorBoard的使用(tensorflow的可视化工具)
- Duilib 源码分析之 xml 解析篇
- ::before和::after伪元素的使用
- 面试感悟----一名3年工作经验的程序员应该具备的技能
- golang学习之旅:使用go语言操作mysql数据库
- 大数据商业智能的十大戒律