我需要初始化位吗?

Do I need to initialize bits?

本文关键字:初始化      更新时间:2023-10-16

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

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

问题很简单:我只是将位 1 和 8 设置为 1。我是否需要将位 2-7 设置为 0 或默认设置?如果我保持上面的代码,是否有可能出现未定义的行为?

这取决于声明变量的位置:

  • 如果您的变量是全局变量或静态变量,则从ANSI/ISO C 规范
  • 如果变量是局部变量,则未指定初始值。

我的 2 美分:在这种情况下,您应该始终将变量初始化为零:

char c = 0;

a很可能是一个局部变量,因此无论如何您都必须这样做。在所有情况下,它都不会花费您(几乎)任何东西,并且您将避免令人讨厌的错误。

在您的示例中,您应该首先设置 c = 0; .

但是,您可以简单地设置c = (1<<0) | (1<<7);

PS:如果它是一个静态变量(局部或全局),那么编译器或链接器将其设置为 0。

1 << 0表示 1 向左移动 0。等于 1。

1 << 7 表示 1 向左移动 7。等于 128 (0b10000000)。

但是,c的当前值尚未定义。因此,您将未定义值的第一个和最后一个位设置为 1。如果您打算使用:0b10000001,则可以设置c = 0或写入c = (1 << 0) | (1 << 7);