TL;博士;
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 的问题,因为我认为之前一定有人问过这个问题。抱歉,如果这样的问题对某些人来说似乎很明显,但对我来说却不是。
最佳答案
是的,你是对的。
C# 中的 int
是没有未使用位的 2 的补码整数类型。每个位模式都与一个唯一的整数值相关联。无穷大,“不是数字”等之类的东西没有空间。 (这种唯一性也适用于 uint
、long
、ulong
、sbyte
、byte
, short
, ushort
, &c.)
为避免疑义,没有符号零,这是符号大小和 1 的补码方案的属性。
另请注意,对于 IEEE754 浮点 double
,您的代码将使用带符号的负零,因为 0.0
被定义为等于 -0.0
,0.0 > -0.0
为 false
。你是正确的,它会在 NaN
上失败。
引用:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/int
关于c# - 在 C# 中,int 必须是正数、负数还是零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45864288/