TL; DR;
C#语言是否确保int
必须包含一个且仅有一个以下属性?
0
0
0
准确地说,一个例子,这个断言是否保证永不失败?
public void CheckFacts(int n)
{
int trueFacts = 0;
if (n > 0) trueFacts += 1;
if (n == 0) trueFacts += 1;
if (n < 0) trueFacts += 1;
Assert.AreEqual(trueFacts, 1);
}
后续问题:如果是,对于各种整数类型是否也是如此? (uint,long,ulong,sbyte,byte,short,ushort,...)
对于那些可能认为这个问题有点偏离的人,不要忘记计算机数字可能会令人惊讶。
例如,double
必须是正,负或零的情况。它可以是NaN
,它可以是值会导致上述断言失败。+0.0
或-0.0
,3
编辑:
有人说这句话我花时间写这个问题,但不是一分钟看规格。我实际上花了很多时间阅读:https://msdn.microsoft.com/fr-fr/library/system.int32(v=vs.110).aspx,因为int
应该是System.Int32
的别名。老实说,我不确定我的问题是否明确。另外,我彻底搜索了c#关于SO的问题,因为我认为有人一定是在问这个问题。对不起,如果这个问题对某些人来说显而易见,那不适合我。
答案 0 :(得分:9)
是的,你是对的。
C#中的int
是2的补码积分类型,没有未使用的位。每个位模式都与唯一的整数值相关联。没有空间,如无限,“不是数字”,&amp; c。 (该唯一性也适用于uint
,long
,ulong
,sbyte
,byte
,short
,ushort
和&amp;角)
为避免疑义,没有签名零,这是有符号幅度和1的补码方案的属性。
另请注意,对于IEEE754浮点double
,您的代码将使用带符号的负零,因为0.0
定义为等于{{1} },-0.0
是0.0 > -0.0
。你在false
上失败是对的。
参考:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/int