我有一个字符,我想将第1位设置为1,最后一位设置为1.我可以使用以下代码执行此操作:
char c;
c |= 1 << 0;
c |= 1 << 7;
cout << c;
问题很简单:我只是将第1位和第8位设置为1.我是否需要将第2-7位设置为0或默认情况下这样做?如果我保留上面的代码,是否存在未定义行为的可能性?
答案 0 :(得分:6)
取决于声明变量的位置:
My 2cents:在这种情况下,您应该始终将变量初始化为零:
char c = 0;
a
可能是一个局部变量,因此无论如何你必须这样做。在任何情况下,它都不会花费你(差不多)任何东西,你将避免一个讨厌的错误。
答案 1 :(得分:3)
在您的示例中,您应首先设置c = 0;
。
但相反,您只需设置c = (1<<0) | (1<<7);
。
P.S。:如果它是静态变量(本地或全局),则编译器或链接器将其设置为0。
答案 2 :(得分:2)
1 << 0
表示1向左移动0.等于1.
1 << 7
表示1向左移动了7.这等于128(0b10000000)。
然而,c
的当前值未定义。因此,您将1设置为未定义值的第一位和最后一位。如果您打算:0b10000001,您可以设置c = 0
或写c = (1 << 0) | (1 << 7);