切勿混合使用无符号类型和有符号类型,否则产生极大的错误。
C++不会直接把两种不同类型的值相加,而是先根据类型转换的法则转换成同一类型后再相加。
类型转换
算术转换
1, char,unsigned char,signed char,short,unsigned short
char,unsigned char,signed char,short,unsigned short 提升成int 类型或 unsigned int 类型。
wchar_t char16_t char32_t 提升成int unsigned int long unsigned long long long unsigned long中最小的一种类型。
2, int ,unsigned int , long , unsigned long, long long ,unsigned long long
不看类型!只看所占字节宽度!
类型所占字节宽窄不同:窄字节转成宽字节
类型所占字节宽窄相同:有符号转成无符号
举例:
long 和 unsigned int,如果long是4字节则 long 转换成 unsigned int ;如果long是8字节,则unsigned int 转换成 long 。
unsigned int 和 int 转成int 转换成 unsigned int 。
3,整型与浮点型:整型转成浮点型。
4,float 转换成 double 。
有符号数转换成无符号数的注意点!
1
unsigned int u = 10; int b = -42; std::cout << b + b << std::endl;//-48 std::cout << u + b << std::endl;//4294967264
2
无符号整数,必须大数 - 小数 。
3
for(unsigned int i = 10; i >= 0 ; --i) ; //死循环
#include<iostream> using namespace std; int main() { unsigned int u1 = 10; unsigned int u2 = 20; cout << u2 - u1 << endl;//10 cout << u1 - u2 << endl;//4294967286 unsigned int u3 = 1; int i = -2; cout << u3 + i << endl;//4294967295 system("pause"); }