关于c#:按位容量和位容量之间的关系是什么?


What's the relationship between bitwise capacity and bit capacity?

简言之,在C 5.0中C主题的转换(第2章)中,作者说:

...Conversions can be either implicit or explicit: implicit conversions happen automatically, and explicit conversions require a cast. In the following example, we implicitly convert an int to long type (which has twice the bitwise capacity of an int)...

例如:

1
2
3
int x = 12345;      // int is a 32-bit integer
long y = x;         // Implicit conversion to 64-bit integer
short z = (short)x; // Explicit conversion to 16-bit integer

位容量和位容量之间有关系吗?或者,作者对位能力的观点是什么?


我认为,他想区分"位容量"和"数字容量"。

在本例中,数据类型的按位容量不同:int有32个,long 64个,short 16个。在这种情况下,隐式地转换为具有较高容量的数据类型,显式地转换为具有较低位容量的数据类型。

另一方面,也有类似于"数字容量",其中int和uint共享相同的位数(它们具有相同的"按位容量"),但在您可以存储的值方面仍然不完全兼容(uint不支持负值)。


我认为他们的意思是"能力,相对于比特"。如果省略了"按位"部分,那么可以很容易地将其解释为"此类型的值比其他类型的值多两倍",这是错误的:它的值比其他类型的值多两倍多。它可以容纳两倍的位,从而以指数形式增加值的数量。


这是同一件事。它只是意味着你有两倍多的比特来表示你的值,这意味着你可以存储更大的数字。因此,数字容量与位容量相关联,因为位越多,数字容量越高。

使用64位数据类型,可以使用64位二进制数字表示值。