位运算
位运算
位运算符允许对整型数中指定的位进行置位。如果左右参数都是字符串,则位运算符将操作字符的 ASCII 值。
例子 | 名称 | 结果 |
---|---|---|
$a & $b | And(按位与) | 将把 $a 和 $b 中都为 1 的位设为 1。 |
$a | $b | Or(按位或) | 将把 $a 或者 $b 中为 1 的位设为 1。 |
$a ^ $b | Xor(按位异或) | 将把 $a 和 $b 中不同的位设为 1。 |
~ $a | Not(按位非) | 将 $a 中为 0 的位设为 1,反之亦然。 |
$a << $b | Shift left(左移) | 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。 |
$a >> $b | Shift right(右移) | 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。 |
例:
~2
解题思路:在计算机运算的时候,都是以补码的方式来运算的。要得到2的补码:2为正数,正数的原码、反码、补码都一样。
2的补码:00000000 00000000 00000000 00000010
对的补码进行~非运算(取反):11111111 11111111 11111111 11111101 [补码 得到的是一个负数的补码 ,要根据它找到原码]
负数的补码=它的反码+1. :11111111 11111111 11111111 11111100 [反码]
负数的反码=它的原码符号位不变,其它位取反 ,取反得原码:
10000000 00000000 00000000 00000011 [原码]
最后的计算结果为:-3
~-2
解题思路:在计算机运算的时候,都是以补码的方式来运算的。要得到-2的补码:
先得到-2的原码:100000000 00000000 00000000 00000010 [-2原码] 负数的反码=它的原码符号位不变,其它位取反
-2的反码:11111111 11111111 11111111 11111101 [-2的反码] 负数的补码=它的反码+1.
-2的补码:11111111 11111111 11111111 11111110 [加1后进位了]
对-2的补码进行~非运算: 00000000 00000000 00000000 00000001 [运算后得到的也是补码,最高位是0,为正数,正数的原码、反码、补码都一样。]
得到最到结果为;1
2|3
先得到 2和3的补码:正数的原码、反码、补码都一样。
2 补码:00000000 00000000 00000000 00000010
3的补码:00000000 00000000 00000000 00000011
进行或运算:00000000 00000000 00000000 00000011 [补码 最高位是0,为正数,正数的原码、反码、补码都一样。]
最后结果:3
2&3
先得到 2和3的补码:正数的原码、反码、补码都一样。
2 补码:00000000 00000000 00000000 00000010
3的补码:00000000 00000000 00000000 00000011
进行与运算(都为1才为1):
00000000 00000000 00000000 00000010[补码 最高位是0,为正数,正数的原码、反码、补码都一样。]
最后结果:2
2^3
先得到 2和3的补码:正数的原码、反码、补码都一样。
2 补码:00000000 00000000 00000000 00000010
3的补码:00000000 00000000 00000000 00000011
进行异或运算(不同的位设为 1。):
00000000 00000000 00000000 00000001 补码 最高位是0,为正数,正数的原码、反码、补码都一样。]
最后结果:1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构