C++不同类型数值变量之间相互赋值的规则
来源:互联网 发布:随州seo 编辑:程序博客网 时间:2024/05/17 02:09
C++不同类型数值变量之间的相互赋值,可以用以下的伪代码来描述:
type1 a = ?;type2 b = ?;b = a; 或 b = (type2)a;
示例:
short a = 0xFF00;unsigned int b = a;cout << hex << endl;cout << a << endl;cout << b << endl;
一、if (sizeof(a) == sizeof(b))
直接按位复制
short a = 0xFF08;unsigned short b = a;cout << hex << endl;cout << a << endl; //输出FF08cout << b << endl; //输出FF08
二、if (sizeof(a) > sizeof(b))
低位截取
int a = 0xFF00E500;short b = a;cout << hex << endl;cout << a << endl; //输出FF00E500cout << b << endl; //输出E500
三、if (sizeof(a) < sizeof(b))
1、if a为signed类型
如果最高位为1,则b的高位全部补为1
如果最高位为0,则b的高位全部补位0
char ch = 0x85;unsigned short b = ch;cout << hex << endl;cout << b << endl; //输出0xFF85char ch = 0x74;short b = ch;cout << hex << endl;cout << b << endl; //输出74
2、if a为unsigned类型
b的高位全部补0
unsigned char a = 0xFE;int b = a;unsigned c = a;cout << hex << endl;cout << b << endl; //输出FEcout << c << endl; //输出FE
Note:
hex只对数值起作用,比如
char ch = 0xFF;cout << hex << endl;cout << ch << endl; //输出空而不是FF
特殊实例分析
char ch = 0xff;if (ch == 0xff)
ch == 0xff其实为假
这好像有点不可理喻
呵呵
其实上是在比较两个int值的大小,会用到上面所讲的转换原则
ch为signed类型,转换之后高位补0为0xffffffff
当然不等于0x000000ff
这样写就OK了
if (ch == char(0xff))
或
char ch2 = 0xff
if (ch == ch2)
或
if (ch == 0xffffffff)
示例:
char ch = 'a'; // 'a'的ASCII码为0x61char ch2 = 0x61;if (ch == ch2) //为真{}if (ch == 0x61) // 为真{}
但是对于ASCII码的最高位也即第七位为1的char
if (ch == 0x…)就为假了
0 0
- C++不同类型数值变量之间相互赋值的规则
- 不同类型变量赋值的讨论
- C语言中不同类型数据之间的赋值
- C++不同类型字符串之间的相互转换
- C语言、字符串与数值之间的相互转…
- C 不同类型指针的相互转化
- C#:数值与字符串之间相互转换
- 【PHP内核】语法:不同类型之间数值运算的实现
- 字符串与数值之间的相互转换
- 数值、字符之间的相互转换
- java关于数组之间的相互赋值
- java关于数组之间的相互赋值
- c++中的字符串之间的相互赋值
- C语言之第九课:C语言变量赋初值及不同类型数据之间的混合运算
- 子类父类变量的相互赋值
- 面对不同类型的数值,我们如何使用结构体进行赋值
- 字符串之间相互转换 字符与数值之间的转换
- 不同类型之间的转换
- Java创建文件夹及文件实例代码
- VS2013配置编译Caffe-Win10_X64
- 数字PI控制器
- A + B Problem II (1002)
- JPEG图像编码过程简介
- C++不同类型数值变量之间相互赋值的规则
- poj 3630 Phone List (字典树)
- java怎么创建目录(删除/修改/复制目录及文件)代码实例
- Hibernate的查询 标准(Criteria)查询 聚合和分组
- SelectObject()函数详解
- 进程间通信的四种方式
- 深入浅出讲解TCP/UDP协议
- swing背景图片
- 【c++程序】程序打开命令cmd