C# Isn';t.NET';s整数仅基于2';补语系统?
: Int32值以31位表示,第32位用作符号位正值用符号和大小表示。负值用二的补码表示 使用的正值表示与使用的正值表示是相同的,这难道不是真的吗 那么,它不应该被改写为:“Int32值(无论正负)用2的补码表示法表示”C# Isn';t.NET';s整数仅基于2';补语系统?,c#,.net,vb.net,C#,.net,Vb.net,: Int32值以31位表示,第32位用作符号位正值用符号和大小表示。负值用二的补码表示 使用的正值表示与使用的正值表示是相同的,这难道不是真的吗 那么,它不应该被改写为:“Int32值(无论正负)用2的补码表示法表示” 还是我误解了什么?是的,你是对的。他们应该说它使用2的补码系统,然后给出使用31位的定义,而不是将否定解释为“2的补码”,只是解释否定的位表示。然后给他们关于位运算符的警告。不,我不这么认为,2的补码表示存在的全部原因是支持对负值的基本运算。10000001 == -127,
还是我误解了什么?是的,你是对的。他们应该说它使用2的补码系统,然后给出使用31位的定义,而不是将否定解释为“2的补码”,只是解释否定的位表示。然后给他们关于位运算符的警告。不,我不这么认为,2的补码表示存在的全部原因是支持对负值的基本运算。10000001 == -127, 00000001 == 1. 用两个补码系统来表示正的int值,是的,当你考虑正数时,你必须意识到最高比特并不意味着“更积极”,这意味着当你考虑任何数字时,你从2S补足的角度考虑它会是积极的还是消极的。这个答案是合理的。但IMHO更准确的说法是“32位”,而不是“31位”。Int32中的最高有效位与任何其他位没有任何不同。它确实有助于指示符号,但它本身并不指示符号(即,在去除符号后,您无法查看数字的其余部分并获得正确的值)。MSB是整个值不可分割的一部分,因此该类型的任何定义都应仅表明它使用32位句点。@Peterdunio如果您阅读引用页上更广泛的文档,则该问题与文档有关,它使用32位句点,参考的特定段落是关于32位值的不同部分。您的回答假定说明了文档应该如何编写,因此它当前所说的内容与此无关。没有理由将前31位与最高有效位区别对待,因为没有所有位,所有位都没有意义。文档目前单独讨论31位并不能证明它应该继续单独讨论31位。