强制类型转换
1. 整型类型的长度级别
char uchar short ushort [ int uint ] long ulong longlong ulonglong
注:int和uint与具体的实现有关。
2. 类型转换
- 低转高:延拓,最高位填充;
- 高转低:截断。
3. 有符号数转无符号数
直接使用强制类型转换并不能去掉符号。
// Example program #include <iostream> #include <bitset> using namespace std; int main() { char c=-1; unsigned char uc=(unsigned char)c; cout<<bitset<8>(c)<<' '<<bitset<8>(uc)<<endl; return 0; }
输出:11111111 11111111
// Example program #include <iostream> #include <bitset> using namespace std; int main() { char c=-1; unsigned short us=(unsigned short)c; cout<<bitset<8>(c)<<' '<<bitset<16>(us)<<endl; return 0; }
输出:11111111 1111111111111111
使用C++的类型转换运算符:static_cast
// Example program #include <iostream> #include <bitset> using namespace std; int main() { char c = -1; unsigned char uc = static_cast<unsigned char>(c); cout << bitset<8>(c) << ' ' << bitset<8>(uc) << endl; return 0; }
输出:11111111 11111111
解决办法:
int a; unsigned int b = (unsigned int)(-a);