获得从用户在单可变5个值而不阵列或任何环路,并找到最大和最小值

问题描述 投票:-5回答:1

写一个程序,得到一个变量五个值,而不使用数组或任何环路,发现如果使用其他条件的最大和最小数量。

c#
1个回答
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);
}
© www.soinside.com 2019 - 2024. All rights reserved.