我在开始使用我的实验室时遇到了一些麻烦。实验室有以下说明:
给定值
int input = 0b10010110
确定个人喜欢什么样的运动。假设此输入中没有错误。从左到右,每个位置代表以下内容:足球,棒球,排球,游泳,垒球,足球,曲棍球,长曲棍球。如果在该位置有1,则该人喜欢该运动。基于给出的“二进制”输入,将用户喜欢的所有运动输出到屏幕。对于给定的二进制数,用户喜欢,足球,游泳,足球和曲棍球。
不要制作一个字符数组。
请务必使用枚举数据类型。
我不确定如何比较字符串的每个位置以判断它是1还是0.我的一个想法是使用枚举类型,我将每个运动设置为十位数字,其中只有它适当的位置是1
enum sport{
Football = 0010000000,
Baseball = 0001000000,
Volleyball = 0000100000,
... ,
Lacrosse = 0000000001
};
然后我会在给定值“input”上向左/向右移动适当的次数,只留下指定位置的原始值,并将所有其他值设置为0.对于Football:
input << 2; input >> 9; input << 7;
因此新的设定值为0010000000
。然后我就可以将这个数字作为一个整体进行比较。对于每种情况,我都会这样做,但我想不出有不同的方法。
我完全离开了吗?是否有更多功能方法使用位操作检查每个位置的值?感谢您提前获得任何帮助。
答案 0 :(得分:0)
使用按位AND运算符&
:
if (input & Football) {
// Football bit is set
} else {
// Football bit is not set
}
另请注意,0b
前缀是编译器扩展,但不是标准C.在enum
值中,以0
前缀开头的数字是八进制格式(您必须解决这个问题)。我建议你使用十六进制格式进行位操作。
答案 1 :(得分:0)
如果通过将1向左移动适当数量的位置来定义运动值,则可以使事情更具可读性;实际上,您可以对运动值使用简单的枚举,并使用它来指定移位的位数。