美文网首页
有符号数与无符号数

有符号数与无符号数

作者: 顽强的猫尾草 | 来源:发表于2018-09-03 11:57 被阅读16次

    最直观的区别:有符号数的第一位表示正负,无符号数的所有位都用来表示数字大小(且全部是正数)。

    计算机中的数字都是用补码表示,无符号数只有正数,所以无符号数的补码和原码相同。

    虽然最常用的数据类型是 int,但为了便于书写和解释,我们使用位数更短的 short 类型。

    类型 十进制 十进制幂次表示 二进制
    short -32768 ~ 32767 -215 ~ 215-1 10000000 00000000 ~ 01111111 11111111
    unsigned short 0 ~ 65535 0 ~ 216-1 00000000 00000000 ~ 11111111 11111111

    有符号数与无符号数之间没有智能的转换方式,无论是使用 C 风格还是 C++ 风格,都需要自己做保护。

    unsigned short static_cast<unsigned short>(data->seqNum);
    

    TIPS:

    给无符号类型赋一个超出它表示范围的初始值的时候,结果是初始值对无符号类型标识数值总数取模后的余数。例:

    unsigned char c = -1;    // c 的值为 255
    

    当一个算数运算中既有无符号数又有 int 时,int 值会转换成无符号数。例:

    int i = -42;
    unsigned u = 10;
    cout << i + u;    // 输出 4294967264 (= 11111111 11111111 11111111 11010110 + 00000000 00000000 00000000 00000010 = 4294967254 + 10)
    

    相关文章

      网友评论

          本文标题:有符号数与无符号数

          本文链接:https://www.haomeiwen.com/subject/qnybwftx.html