为什么5u和-5u的输出不同? CUT C++中的无符号整数,在A中下溢和溢出(如有符号整数)。特别是,算术运算是mod 2^n,其中n是表示无符号整数的位数-5u相当于0u-5u,它等于(0u-1u)-4u0u-1u给出(或std::numeric_l

为什么5u和-5u的输出不同? CUT C++中的无符号整数,在A中下溢和溢出(如有符号整数)。特别是,算术运算是mod 2^n,其中n是表示无符号整数的位数-5u相当于0u-5u,它等于(0u-1u)-4u0u-1u给出(或std::numeric_l,c++,C++,为什么5u和-5u的输出不同? CUT C++中的无符号整数,在A中下溢和溢出(如有符号整数)。特别是,算术运算是mod 2^n,其中n是表示无符号整数的位数-5u相当于0u-5u,它等于(0u-1u)-4u0u-1u给出(或std::numeric_limits::max()),即65535。所以你有-5u=65535-4=65531u是无符号的,所以你只是试着把一个负数打印到一个无符号的整数上,这就覆盖到了无符号整数的最大范围,0-65531支持无符号的是1字节(对于comodity;通常

为什么5u和-5u的输出不同?
<代码> CUT

C++中的无符号整数,在A中下溢和溢出(如有符号整数)。特别是,算术运算是

mod 2^n
,其中
n
是表示
无符号整数的位数<代码>-5u
相当于
0u-5u
,它等于
(0u-1u)-4u
0u-1u
给出(或
std::numeric_limits::max()
),即
65535
。所以你有
-5u=65535-4=65531

u
是无符号的,所以你只是试着把一个负数打印到一个无符号的整数上,这就覆盖到了无符号整数的最大范围,0-65531支持
无符号的
是1字节(对于comodity;通常把它们看作2或4字节)
5u
表示
b00000101
,因为
-1u
是二进制的
b11111111
,所以只需从中减去4,所以
-5u
b11111011
,作为
int
,它是
251
。将此答案缩放到您的
无符号
大小,您将得到您的答案。输出不同,因为值不同。学究:无符号整数算术中没有溢出或下溢。无符号整数在Z mod 2^NumBits中实现算术,因此可以通过选择[0,2^NumBits]中其等价类的代表来表示任何整数。请告诉我0u-1u如何给出UINT_MAX@user7919320 “算术运算是
mod 2^n
,其中
n
是表示
无符号int
的位数。”Daniel告诉我0u-1u如何给出.UINT_MAX@user7919320我去过,两次。
cout<<-5u
cout<<5u