我在 BitArray 源代码中找到了这个条目:
/*=========================================================================
** Sets all the bit values to value.
=========================================================================*/
public void SetAll(bool value) {
int fillValue = value ? unchecked(((int)0xffffffff)) : 0;
int ints = GetArrayLength(m_length, BitsPerInt32);
for (int i = 0; i < ints; i++) {
m_array[i] = fillValue;
}
_version++;
}
0xffffffff 是-1,那么为什么要替换 1(true),为什么不直接放 1?
为了可读性,不管它看起来多么奇怪。
此代码的目的是创建一个数组
int,其中每个位都填充给定值。如果传递 true,则每个数组元素应接收二进制值 11111111111111111111111111111111111111 - 32 个单位,或十六进制的 0xFFFFFFFF。因此,由于 0xffffffff 写在代码里,马上就清楚4个字节的单元被填满了。如果写了-1,那么结果是一样的,但是在阅读代码时,就会出现一个问题:为什么要使用负一以及它与位填充的关系。
使用
unchecked和类型转换的操作是由于十六进制文字的值超出了 int 的允许限制,没有它们,代码将无法编译。1 是另一个值,其中并非所有位都被填充。