强制类型转换

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);
原文地址:https://www.cnblogs.com/jmliao/p/8543758.html