Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么-1“;11111111不是签名整数中的10000001吗_C++_C - Fatal编程技术网

C++ 为什么-1“;11111111不是签名整数中的10000001吗

C++ 为什么-1“;11111111不是签名整数中的10000001吗,c++,c,C++,C,我怀疑为什么我们在签名int中使用-1作为11111111,而不是10000001。因为正如我们所了解的,第一位用于指定符号,其余七位用于值。那么设计师决定使用-1作为 > [第一位< /代码>=1,代码七>值为七位=127 ],但不[第一位=1,值为七位)和两个补语形式(-1类似代码> 11111111 < /代码>)。 此外,两种语言都允许一个人的补语形式(与-1类似11111110) 然而,在大多数现存的平台上,都使用了二的补充形式。一个主要的优点(你问的为什么)是,这些值与你为无符号算

我怀疑为什么我们在
签名int
中使用-1作为11111111,而不是10000001。因为正如我们所了解的,第一位用于指定符号,其余七位用于值。那么设计师决定使用-1作为


<> > [<代码>第一位< /代码>=1,代码七>值为七位=127 ],但不[<代码>第一位=1,<代码>值为七位 C和C++允许符号和幅度(具有-1类似<代码> 10000001 < /代码>)和两个补语形式(-1类似<>代码> 11111111 < /代码>)。 此外,两种语言都允许一个人的补语形式(与-1类似
11111110


然而,在大多数现存的平台上,都使用了二的补充形式。一个主要的优点(你问的为什么)是,这些值与你为无符号算术包所用的值相同,这是你在C和C++中使用的<代码>未签名< /代码>所得到的。换句话说,如果您将相同的位解释为无符号值,那么它与负值的差异正好是2n,其中n是值表示位的数目。

因为2是补码。@Oliver:您能解释一下位吗?详细解释可以在或在(重复?)处找到你想的是“符号幅度”表示法。这是一种有效的格式,但它并不是最常见的(大幅度)-这是两个补码表示法,它给出了您提到的
11111111
格式。所有这些都假设您处理的是有符号8位整数(aka
signed char
)。