首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >0b1在C++中是什么意思?

0b1在C++中是什么意思?
EN

Stack Overflow用户
提问于 2022-02-13 22:08:32
回答 2查看 863关注 0票数 1

我偶然发现了我无法理解的代码的一部分。

代码语言:javascript
运行
复制
for (unsigned int i = (x & 0b1); i < x; i+= 2)
    {
        // body
    }

这里,x是从0到5。

0b1是什么意思?对于例如:(0 & 0b1),(4 & 0b1)等等,答案是什么?

EN

回答 2

Stack Overflow用户

发布于 2022-02-13 22:10:06

0b...是一个二进制数,就像0x...是十六进制,0...是八进制。

因此,0b11是相同的。

1b0是非法的,其中的第一个数字必须始终是0

票数 6
EN

Stack Overflow用户

发布于 2022-09-13 06:14:02

正如前面的答案所述,它是整数1的二进制表示,但它们似乎没有完全回答您的问题。这有很多层,所以我将简要地解释每一层。

在这种情况下,符号是作为位和运算符工作的。i & 0b1 (有时)是一种检查整数是否与i % 2 == 0相反的更快的方法。

假设您有int x = 5,您希望检查它是否使用按位和。

在二进制文件中,5将表示为0101。最后一个1实际上代表数字1,在二进制整数中,它只存在于奇数中。让我们把按位和运算符应用于5和1;

代码语言:javascript
运行
复制
 0101
 0001
&----
 0001

运算符正在检查每一列,如果两行都是1,则结果的该列将是1 -否则,将是0。因此,结果(转换回base10)是1。现在让我们尝试一个偶数。4= 0100

代码语言:javascript
运行
复制
 0100
 0001
&----
 0000

结果现在等于0。这些规则适用于每一个整数,无论其大小。

这里的高级层是C中没有布尔数据类型,所以布尔值被表示为0 (false)或任何其他值(true)的整数。这允许一些棘手的速记,因此条件if(x & 0b1)只在x是奇数时才会运行,因为odd & 0b1总是等于1 (true),而even & 0b1总是等于0 (false)。

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

https://stackoverflow.com/questions/71105283

复制
相关文章

相似问题

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