C++ 有符号和无符号整数C+的实现差异+;

C++ 有符号和无符号整数C+的实现差异+;,c++,integer,implementation,C++,Integer,Implementation,我知道两个补码的表示法。我想知道int和unsigned int在实现方面有什么具体区别。我不想这么说 比较不同(符号位将更改执行比较的方式) 乘法是不同的(我取模,将这些模相乘,并根据两个操作数的符号对结果进行补码) 除法是不同的(相同的乘法原因) 加减法看起来是一样的 还有什么可能我不知道的差异吗?我假设两个补码算法是最常见的 有很多关于二补运算的解释。例如,注释中的链接和此处的乘法: 1:对。比较的实现方式通常与减法相同,但减法的结果被丢弃,只使用状态位。吹毛求疵:“是不同的,但“==”和

我知道两个补码的表示法。我想知道
int
unsigned int
在实现方面有什么具体区别。我不想这么说

  • 比较不同(符号位将更改执行比较的方式)
  • 乘法是不同的(我取模,将这些模相乘,并根据两个操作数的符号对结果进行补码)
  • 除法是不同的(相同的乘法原因)
  • 加减法看起来是一样的

  • 还有什么可能我不知道的差异吗?

    我假设两个补码算法是最常见的

    有很多关于二补运算的解释。例如,注释中的链接和此处的乘法:

    1:对。比较的实现方式通常与减法相同,但减法的结果被丢弃,只使用状态位。吹毛求疵:“是不同的,但“==”和“!=”是相同的。 2,3:是的,乘法和除法是不同的。 他说:嗯,算是吧。结果的位模式是相同的,但有重要的区别。典型处理器上的add/sub指令设置溢出、进位、负和零的状态标志。所以我想区别在于你如何解释结果,而不是结果本身。这些状态位对C/C++程序不可用,但由编译器生成的代码使用。 5:延期。铸造到更宽的类型是不同的。对于无符号积分,它们是“零扩展的”,而对于有符号积分,它们是“符号扩展的”。符号扩展意味着它将复制窄类型的高阶位(符号位),以填充宽类型的附加位。 6:范围:例如,无符号8位的值范围为0…255,而有符号8位的值范围为-128…+127。 7:位操作“&”、“|”、“~”和“^”是相同的
    8:位移位操作“:左移位是相同的,但右移是不同的,因为右移的符号值做了扩展。因为你特别标记C++,<代码>未签名的int ”环绕,“但是对于<代码>签名的int s溢出是未定义的行为。我想它们之间唯一的区别是,
    int
    是两个补码,
    unsigned int
    不是两个补码,因此
    int
    中的
    2^31
    是负数,而
    unsigned int
    中的
    2^31
    是正数,对于
    int
    unsigned int
    中小于31的幂,所有位均为正数。指定的int用于表示负数和正数,因此有符号int的值范围为:-2147483648到2147483647,无符号int的值范围为:0到4294967295。有符号整数对负值使用2的补码。例如,8位有符号值(-1)表示为1111111。下一个规则用于负值表示:000 0001(反转)->1111 1110(加一)->1111 1111查看它,可能会重复