编写一个程序,该程序在不使用数组或任何循环的情况下在单个变量中获得五个值,并使用if else条件查找最大和最小数目。
答案 0 :(得分:0)
您的难题可以通过移位操作来解决,以在另一个内存中存储和提取多个变量。下面是一个演示-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);
}