2014-01-19 99 views
2

我有一个char和我想设置的第1位为1,最后一位为1。我可以用下面的代码做到这一点:我是否需要初始化位?

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

的问题很简单:我只设置1位和第8到1.是否需要将位2-7设置为0或默认完成?如果我保留上面的代码,是否有任何未定义行为的机会?

+0

目前尚不清楚你想要做什么。你的句子相互矛盾。 –

+0

其他位保持原样:如果它们之前未定义... – delnan

+5

c = 129怎么样? – Cthulhu

回答

6

这取决于变量声明,其中:

  • ,如果你的变量是一个全球静态之一,被自动初始化为零作为 ANSI/ISO C规格的
  • 如果变量是本地,初始值是未指定

我的2分钱小费:在这种情况下,你应该总是变量初始化为零:

char c = 0; 

a可能是一个局部变量,所以你将不得不这样做无论如何。在任何情况下,它都不会花费你(几乎)任何东西,并且你将避免一个讨厌的bug。

3

在你的例子中,你应该首先设置c = 0;

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

附::如果它是一个静态变量(本地或全局),那么它由编译器或链接器设置为0。

+0

编译器... –

+0

现在我觉得这很有道理;感谢您的重点... –

2
1 << 0

装置1向左移位由0等于1。

1 << 7装置1向左移位由7.等于128(0b10000000)。

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

+0

你怎么知道他们是“已经存在”?他们可以被设置为任何东西。 – juanchopanza

+2

OP不分配,他与OR相结合! –

+0

OP的问题不清楚,我认为c已经设置好了,他想改变第一个和最后一个位。 –

相关问题