C++ [conv.integral]/3在最新的C&x2B+;草案

C++ [conv.integral]/3在最新的C&x2B+;草案,c++,language-lawyer,C++,Language Lawyer,我理解将short转换为无符号int的机制。例如,给定一个short y=-1

我理解将
short
转换为
无符号int
的机制。例如,给定一个
short y=-1无符号int
我们将得到数字4294967295,它等于2^32-1。如果
short
等于-2,我们将它分配给一个
无符号int
,我们将得到4294967294,它等于2^32-2,以此类推

我的问题是根据最新草案中的段落推断出上述机制:

否则,结果将是指定的目标类型的唯一值 与模2^N的源整数全等,其中N是 目标类型

我可以理解4294967295 mod 2^32=4294967295是目标类型的唯一值,它可能与源类型的值-1 mod 2^32一致(简称)。但我如何证明这两个数字是相等的呢

但是我如何证明[4294967295和-1]是相等的呢

这些数字并不相等。它们是全等模232(等于4'294'967'296)

为了了解如何显示一致性,让我们首先看看定义():

对于正整数n,两个数a和b称为模n全等,如果它们的差为a− b是n的整数倍(即,如果存在整数k,则a− b=千牛)

好的,让我们计算一下这个差异:

d = a − b
d = 4'294'967'295 - (-1)
d = 4'294'967'296
现在,让我们回答这个问题,
d
n
的倍数吗?换句话说,是否存在可以与
d
相乘的乘法器
k
,结果是
n


答:有。当
k=1
时,
d*1
等于4'294'967'296,这实际上等于
n
。因此,我们已经证明
-1≡ 4'294'967'295(mod 4'294'967'296
)。

但如何证明这两个数字相等?
哪两个数字?@eerorika 4294967295==-1 mod 2^32这些数字不相等。它们是mod 2^32全等的。例如,你可以使用计算器来显示是否。你是在问如何计算负数的模吗?@eerorika这是同余的定义。7 mod 2与5 mod 2是一致的,因为7 mod 2=1等于5 mod 2=1。一个小的修正:
-1 mod 4294967296==4294967295 mod 4294967296
,而不是
-1==4294967295 mod 4294957296
@Alexander同余的模通常写在右边。我现在明白你的意思了。谢谢