0

我在开始使用我的实验室时遇到了一些麻烦。实验室有以下说明:

给定一个值int input = 0b10010110确定个人喜欢什么运动。假设此输入中没有错误。从左到右,每个位置代表以下:足球、棒球、排球、游泳、垒球、足球、曲棍球、曲棍球。

如果在那个位置上有一个 1,那么这个人喜欢这项运动。根据给定的“二进制”输入,将用户喜欢的所有运动输出到屏幕上。对于给定的二进制数,用户喜欢足球、游泳、足球和曲棍球。

  • 不要创建一个字符数组。

  • 请务必使用枚举数据类型。

我不确定如何比较字符串的每个位置以判断它是 1 还是 0。我的一个想法是使用枚举类型,在其中我将每项运动设置为十位数字,其中只有它的适当位置是1

enum sport{
    Football = 0010000000,
    Baseball = 0001000000,
    Volleyball = 0000100000, 
    ... , 
    Lacrosse = 0000000001
};

然后,我将在给定值“输入”上向左/向右移动适当的次数,以仅保留指定位置的原始值并将所有其他值设置为 0。对于足球:

input << 2; input >> 9; input << 7;

所以新的设定值为0010000000。然后我就可以将这个数字作为一个整体进行比较。对于每种情况,我都必须这样做,但我想不出另一种方法来做到这一点。

我完全没有了?有没有更实用的方法来使用位操作检查每个位置的值?感谢您提前提供任何帮助。

4

2 回答 2

0

使用按位与运算符&

if (input & Football) {
    // Football bit is set
} else {
    // Football bit is not set
}

另请注意,0b前缀是编译器扩展,但不是标准 C。在您的enum值中,以前缀开头的数字0是八进制格式(您必须解决此问题)。我建议您使用十六进制格式进行位操作。

于 2012-10-07T22:06:54.047 回答
0

如果您通过将 1 向左移动适当数量的位置来定义您的运动价值观,您可以使事情更具可读性;实际上,您可以对运动值使用简单的枚举,并使用它来指定要移位多少位。

于 2012-10-07T22:10:15.947 回答