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

有符号数与无符号数

作者: 顽强的猫尾草 | 来源:发表于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)

相关文章

  • 失误集锦

    2020.10.16 问题描述: 使用了一个无符号数,这个无符号数是两个数相减得到的。而已有代码相减时没有考虑无符...

  • 1.4数据宽度

    计算机对数据的处理是有大小限制的。 本节必须掌握的知识点: 1、数据宽度 2、理解有符号数、无符号数 3、进制的符...

  • Cpp:位操作符

    位操作符:位操作符操作的整数可以是有符号或无符号数。 下面的例子,假设unsigned char有8位: ~: 类...

  • 有符号数与无符号数

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

  • 2_有符号和无符号

    关键词:计算机中的符号位、有符号数的表示法、无符号数的表示法、signed和unsigned、无符号数和有符号数的...

  • 有符号数和无符号数

    在计算机中,若一个数代表有符号数,则一个n位数的最高位代表正数或负数,其余位取反加1。比如1000_0000,则除...

  • 有符号数和无符号数

    1.无符号数是相对于有符号数而言的,指的是整个机器字长的全部二进制位均表示数值位,相当于数的绝对值,表示非负数。 ...

  • 有符号数和无符号数

    在计算机中,若一个数代表有符号数,则一个n位数的最高位代表正数或负数,其余位取反加1,比如1000_0000,则除...

  • c++ primer 读书笔记

    2.基本内置类型 带符号数与无符号数操作时,会变成无符号数。如,-1会变成255 定义于函数体内的内置类型的对象如...

  • 4.一般类型隐式类型转换

    浮点数赋值给整数只取整。 不要把有符号数赋值给无符号数,因为有符号数为负值时会发生意外。

网友评论

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

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