我需要初始化位吗?

时间:2014-01-19 12:30:23

标签: c++

我有一个字符,我想将第1位设置为1,最后一位设置为1.我可以使用以下代码执行此操作:

char c;
c |= 1 << 0;
c |= 1 << 7;
cout << c;

问题很简单:我只是将第1位和第8位设置为1.我是否需要将第2-7位设置为0或默认情况下这样做?如果我保留上面的代码,是否存在未定义行为的可能性?

3 个答案:

答案 0 :(得分:6)

取决于声明变量的位置:

  • 如果您的变量是全局静态,则自动初始化为零 ANSI / ISO C规范
  • 如果您的变量是本地,则初始值为未指定

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);