我有一个char和我想设置的第1位为1,最后一位为1。我可以用下面的代码做到这一点:我是否需要初始化位?
char c;
c |= 1 << 0;
c |= 1 << 7;
cout << c;
的问题很简单:我只设置1位和第8到1.是否需要将位2-7设置为0或默认完成?如果我保留上面的代码,是否有任何未定义行为的机会?
我有一个char和我想设置的第1位为1,最后一位为1。我可以用下面的代码做到这一点:我是否需要初始化位?
char c;
c |= 1 << 0;
c |= 1 << 7;
cout << c;
的问题很简单:我只设置1位和第8到1.是否需要将位2-7设置为0或默认完成?如果我保留上面的代码,是否有任何未定义行为的机会?
这取决于变量声明,其中:
我的2分钱小费:在这种情况下,你应该总是变量初始化为零:
char c = 0;
a
可能是一个局部变量,所以你将不得不这样做无论如何。在任何情况下,它都不会花费你(几乎)任何东西,并且你将避免一个讨厌的bug。
在你的例子中,你应该首先设置c = 0;
。
但是,您可以简单地设置c = (1<<0) | (1<<7);
。
附::如果它是一个静态变量(本地或全局),那么它由编译器或链接器设置为0。
编译器... –
现在我觉得这很有道理;感谢您的重点... –
1 << 0
装置1向左移位由0等于1。
1 << 7
装置1向左移位由7.等于128(0b10000000)。
但是,当前值c
未定义。因此,您将未定义值的第一位和最后一位设置为1。如果您打算有:0b10000001,你既可以设置c = 0
或写c = (1 << 0) | (1 << 7);
你怎么知道他们是“已经存在”?他们可以被设置为任何东西。 – juanchopanza
OP不分配,他与OR相结合! –
OP的问题不清楚,我认为c已经设置好了,他想改变第一个和最后一个位。 –
目前尚不清楚你想要做什么。你的句子相互矛盾。 –
其他位保持原样:如果它们之前未定义... – delnan
c = 129怎么样? – Cthulhu