C++中有符号数与无符号数相互转换关系,多字节数与少字节数相互转换关系

其实总结可能就是几句话

源对象是有符号数的转换

少字节数转成多字节数(如char->(unsigned) short等)

  • 不管转换成的是有符号还是无符号数,统统都是往高位填充源有符号数的符号位。

多字节数转成少字节数(如short->(unsigned) char等)

  • 不管转换成的是有符号还是无符号数,统统去掉高位,只保留目标对象的字节数

源对象是无符号数的转换

少字节数转成多字节数(如char->(unsigned) short等)

  • 不管转换成的是有符号还是无符号数,统统都是往高位填充0。

多字节数转成少字节数(如short->(unsigned) char等)

  • 不管转换成的是有符号还是无符号数,统统去掉高位,只保留目标对象的字节数
    贴上简易代码
#include <iostream>
using namespace std;

int main()
{
    //符号位1,有符号数多字节转无符号少字节
    //结果:去掉高位,只保留无符号的字节数
    short s_short = 0x8199;
    cout<<hex<<s_short<<endl;
    cout<<s_short<<endl;
    char s_char = s_short;
    cout<<hex<<s_char<<endl;
    unsigned char u_char = s_short;
    cout<<hex<<u_char<<endl;
    //符号位1,有符号数多字节转无符号少字节

    //符号位1,有符号数少字节转无符号多字节
    char s_char1 = 0x99;
    cout<<hex<<(int)s_char1<<endl;
    unsigned short s_short1 = s_char1;
    cout<<hex<<s_short1<<endl;
    //符号位1,有符号数少字节转无符号多字节

    //无符号转有符号,小转大,高位补充0
    unsigned char uchar2 = 0x99;
    cout<<"(int)uchar2: "<<(int)uchar2<<endl;
    cout<<"(unsigned int)uchar2: "<<(unsigned int)uchar2<<endl;
    //无符号转有符号,小转大,高位补充0
    //大转小
    unsigned short u_short2 = 0x9999;
    cout<<"(unsigned char)u_short2: "<<(unsigned char)u_short2<<endl;
    cout<<"(char)u_short2: "<<(char)u_short2<<endl;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。