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同余的模通常写在右边。我现在明白你的意思了。谢谢