首页 > 后端开发 > Golang > 正文

Go 中按位运算和屏蔽是如何工作的,为什么'isAdmin & Roles == isAdmin”的计算结果为 True?

Patricia Arquette
发布: 2024-10-27 03:07:02
原创
645 人浏览过

How Do Bitwise Operations and Masking Work in Go, and Why Does

Golang 中的位掩码和按位运算:了解按位逻辑

在 Go 中,位掩码和按位运算提供了操作二进制数据的有效方法。让我们探索这些操作的工作原理,并澄清您对位掩码的困惑。

位掩码:入门

位掩码是一种利用特制常量来表示不同角色或权限的技术。在代码片段中,您使用 iota 常量创建了一系列常量,每个常量在特定位置包含一个“1”位。然后使用这些常量使用按位 OR ('|') 构造角色变量:

<code class="go">var roles byte = isAdmin | canSeeFinancials | canSeeEurope</code>
登录后复制

此操作将角色中的 '1' 位设置为与三个角色中的 '1' 位的位置相匹配常数。可视化二进制表示有助于:

isAdmin          00000001
canSeeFinancials 00000100
canSeeEurope     00100000
-------------------------
roles            00100101
登录后复制

按位 AND 和掩码

您的困惑源于此行中使用的按位 AND ('&') 操作:

<code class="go">fmt.Printf("Is Admin? %v\n", isAdmin &amp; roles == isAdmin)</code>
登录后复制

此操作检查是否在roles 变量中设置了isAdmin。然而,表达式是Admin &仅当 isAdmin 和 Roles 都有“1”位时,roles 返回一个包含“1”位的数字。

在您的情况下,由于 Roles 包含 isAdmin 位,因此 isAdmin & 的结果是角色将等于 isAdmin。这就是表达式计算结果为 true 的原因。

但是,如果您使用不太严格的按位相等 (==),则会将角色的整个二进制表示形式与 isAdmin 进行比较。由于 Roles 包含额外的位,因此它不等于 isAdmin,从而导致 false。

结论

位掩码和按位运算是强大的工具,可让您有效地对二进制数据执行逻辑运算。通过理解位操作背后的概念,您可以在 Go 中编写更健壮、更高效的代码。

以上是Go 中按位运算和屏蔽是如何工作的,为什么'isAdmin & Roles == isAdmin”的计算结果为 True?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!