写一个程序,得到一个变量五个值,而不使用数组或任何环路,发现如果使用其他条件的最大和最小数量。
您的难题可以通过移位操作来解决存储和提取中的其他多个变量。下面是一个示范 - see this blog post for an in depth explanation on what's going on。如果你有兴趣的额外逐位操作you can find more C++ examples here(易于转换为C#)。
enum Species
{
Camel,
Cat,
Caterpillar,
Cheetah,
Chimpanzee,
Cobra,
Cormorant,
Cougar,
Coyote,
Crab,
Crocodile,
}
void AddToBitfield(ref int bitfield, int bitCount, int value)
{
bitfield <<= bitCount;
bitfield |= value;
}
int ReadFromBitfield(ref int bitfield, int bitCount)
{
int value = bitfield & ((1 << bitCount) - 1);
bitfield >>= bitCount;
return value;
}
[Test]
public void BitwisePlayTest()
{
bool isAlive = true;
bool isFiring = false;
bool isMale = true;
bool isFullHealth = false;
Species species = Species.Chimpanzee;
int bitfield = 0;
AddToBitfield(ref bitfield, 1, isAlive ? 1 : 0);
AddToBitfield(ref bitfield, 1, isFiring ? 1 : 0);
AddToBitfield(ref bitfield, 1, isMale ? 1 : 0);
AddToBitfield(ref bitfield, 1, isFullHealth ? 1 : 0);
AddToBitfield(ref bitfield, 4, (int)species);
species = (Species)ReadFromBitfield(ref bitfield, 4);
isFullHealth = ReadFromBitfield(ref bitfield, 1) != 0;
isMale = ReadFromBitfield(ref bitfield, 1) != 0;
isFiring = ReadFromBitfield(ref bitfield, 1) != 0;
isAlive = ReadFromBitfield(ref bitfield, 1) != 0;
Assert.AreEqual(Species.Chimpanzee, species);
Assert.AreEqual(true, isAlive);
Assert.AreEqual(false, isFiring);
Assert.AreEqual(false, isFullHealth);
Assert.AreEqual(true, isMale);
}