我有一个char,我想将第1位设置为1,最后一位设置为1。
char c;
c |= 1 << 0;
c |= 1 << 7;
cout << c;
问题很简单:我只是将位设置为1和8到1。我是否需要将位设置为2-7到0,还是默认情况下这样做?如果我保留上面的代码,是否有可能出现未定义的行为?
发布于 2014-01-19 12:33:27
这取决于声明变量的位置:
我的2 2cents:在本例中,应该始终将变量初始化为零:
char c = 0;
a
可能是一个局部变量,所以无论如何您都必须这样做。在任何情况下,它不会花费你(几乎)任何东西,你将避免一个令人讨厌的错误。
发布于 2014-01-19 12:33:01
在您的示例中,您应该首先设置c = 0;
。
但是,您可以简单地设置c = (1<<0) | (1<<7);
。
P.S.:如果它是静态变量(本地变量或全局变量),则编译器或链接器将其设置为0。
发布于 2014-01-19 12:33:08
1 << 0
的意思是1向左移动0。等于1。
1 << 7
的意思是左移7,等于128 (0b10000000)。
然而,c
的当前值尚未定义。因此,您将一个未定义值的第一个也是最后一个值设置为1。如果您打算拥有: 0b10000001,您可以设置c = 0
或编写c = (1 << 0) | (1 << 7);
https://stackoverflow.com/questions/21216770
复制相似问题