Pac*_*ac0 2 c# int language-lawyer
TL; DR;
C#语言是否确保int必须具有以下属性中的一个且仅具有以下属性?
000准确地说,这个断言是否保证永不失败?
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);
}
Run Code Online (Sandbox Code Playgroud)
后续问题:如果是,对于各种整数类型是否也是如此?(uint,long,ulong,sbyte,byte,short,ushort,...)
对于那些可能认为这个问题有点偏离的人,不要忘记计算机数字可能会令人惊讶.
例如,这不是double必须为正,负或零的情况.它可以是NaN,值将导致上述断言失败.+0.0或者-0.0,3个
编辑:
有人说我不知何故花时间写这个问题,但不是一分钟看规格.我实际上花了很多时间阅读:https://msdn.microsoft.com/fr-fr/library/system.int32(v = vs1010).aspx,因为int它应该是别名System.Int32.老实说,我不确定我的问题是否明确.另外,我彻底搜索了关于SO的c#问题,因为我认为有人必须先问过这个问题.对不起,如果这个问题对某些人来说显而易见,那对我来说就不是了.
是的,你是对的.
一个int在C#是2的补整型没有未使用位.每个位模式都与唯一的整数值相关联.没有空间,如无限,"不是数字",&c.(即独特性也适用于uint,long,ulong,sbyte,byte,short,ushort,& C).
为避免疑问,没有符号零,这是有符号幅度和1的补码方案的属性.
另请注意,对于IEEE754浮点double,您的代码将使用带符号的负零,因为0.0定义为等于-0.0,并且0.0 > -0.0是false.你是对的,它会失败NaN.
参考:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/int