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