首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我需要初始化位吗?

我需要初始化位吗?
EN

Stack Overflow用户
提问于 2014-01-19 12:30:22
回答 3查看 83关注 0票数 2

我有一个char,我想将第1位设置为1,最后一位设置为1。

代码语言:javascript
运行
复制
char c;
c |= 1 << 0;
c |= 1 << 7;
cout << c;

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-19 12:33:27

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

  • 如果变量是全局静态 one,则在ANSI/ISO规范中自动将其初始化为零。
  • 如果变量是unspecified.本地,则初始值为。

我的2 2cents:在本例中,应该始终将变量初始化为零:

代码语言:javascript
运行
复制
char c = 0;

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

票数 6
EN

Stack Overflow用户

发布于 2014-01-19 12:33:01

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

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

P.S.:如果它是静态变量(本地变量或全局变量),则编译器或链接器将其设置为0。

票数 3
EN

Stack Overflow用户

发布于 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);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21216770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档