Python 中按位与运算符(&)的对齐规则详解

发布时间 - 2025-12-29 00:00:00    点击率:

python 的按位与运算符 `&` 对两个整数进行逐位比较时,会将二进制数**右对齐、左补零**,而非按字符串长度对齐;因此 `14 & 16` 实际比较的是 `01110 & 10000`,所有对应位均无同时为 1 的情况,结果为 0。

在 Python 中,按位与(&)是逐位逻辑运算:仅当两个操作数在同一比特位上都为 1 时,结果在该位才为 1;否则为 0。关键在于——位对齐方式是右对齐(least-significant-bit aligned),即从最低位(2⁰ 位)开始对齐,高位不足则自动补零。

以 14 & 16 为例:

  • 14 的二进制表示为 0b1110 → 实际存储为 ...00001110(无限前导零)
  • 16 的二进制表示为 0b10000 → 实际存储为 ...00010000

右对齐后逐位对比(我们只展示必要位宽,共 5 位即可):

    14 →  01110  
    16 →  10000  
         -----  &
    结果 → 00000  → 十进制为 0

注意:不是将 1110 和 10000 按字符串左对齐(如 1110 对齐到 10000 左侧),而是统一右对齐后比较:

❌ 错误理解(左对齐/字符串式对齐):

  1110   ← 4 位
 10000   ← 5 位  
→ 若强行左对齐并截断 → 1110 & 1000 = 1000 (8),但这完全违背 Python 规则。

✅ 正确方式(右对齐 + 零扩展):

     14: ...00001110  
     16: ...00010000  
AND (&): ...00000000  → 0

你可以用 bin() 验证对齐效果:

>>> bin(14)
'0b1110'
>>> bin(16) 
'0b10000'
>>> bin(14 & 16)
'0b0'  # 即 '0b0',等价于 0

再看一个有非零结果的例子,加深理解:

>>> 14 & 12
12
>>> bin(14), bin(12)
('0b1110', '0b1100')
# 右对齐:
#   14 → 1110  
#   12 → 1100  
#       ---- &
#       1100 → 12 ✅

⚠️ 注意事项:

  • 所有整数在按位运算中均视为无限长二进制补码形式(Python 使用任意精度整数,无符号扩展限制);
  • 负数参与 & 运算时,Python 使用二进制补码表示(如 -1 & 3 会得到 3),但初学者建议先掌握非负数场景;
  • 若需固定位宽对齐(如 8 位处理),可手动掩码:(a & 0xFF) & (b & 0xFF)。

总结:14 & 16 == 0 并非 bug,而是严格遵循“右对齐 + 逐位与”的底层规则。掌握这一对齐逻辑,是正确使用 &、|、^、> 等位运算符的基础。


# python 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 在centOS 7安装mysql 5.7的详细教程  简单实现jsp分页  如何快速搭建高效简练网站?  Laravel如何使用Telescope进行调试?(安装和使用教程)  大型企业网站制作流程,做网站需要注册公司吗?  JS实现鼠标移上去显示图片或微信二维码  如何在阿里云高效完成企业建站全流程?  高端企业智能建站程序:SEO优化与响应式模板定制开发  音乐网站服务器如何优化API响应速度?  打造顶配客厅影院,这份100寸电视推荐名单请查收  使用Dockerfile构建java web环境  网站制作报价单模板图片,小松挖机官方网站报价?  如何在宝塔面板创建新站点?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何用景安虚拟主机手机版绑定域名建站?  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Laravel如何与Inertia.js和Vue/React构建现代单页应用  网站制作企业,网站的banner和导航栏是指什么?  Laravel如何实现API资源集合?(Resource Collection教程)  linux top下的 minerd 木马清除方法  如何利用DOS批处理实现定时关机操作详解  如何用好域名打造高点击率的自主建站?  Swift开发中switch语句值绑定模式  javascript日期怎么处理_如何格式化输出  如何在宝塔面板中创建新站点?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  开心动漫网站制作软件下载,十分开心动画为何停播?  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  js代码实现下拉菜单【推荐】  如何在 React 中条件性地遍历数组并渲染元素  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  创业网站制作流程,创业网站可靠吗?  BootStrap整体框架之基础布局组件  Laravel怎么使用artisan命令缓存配置和视图  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  晋江文学城电脑版官网 晋江文学城网页版直接进入  如何注册花生壳免费域名并搭建个人网站?  如何快速登录WAP自助建站平台?  简单实现Android文件上传  微信小程序制作网站有哪些,微信小程序需要做网站吗?  Android使用GridView实现日历的简单功能  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  ,怎么在广州志愿者网站注册?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧