You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中单个‘&’的含义及使用方法?附代码示例解析

C语言中单个&(按位与)运算符的含义与用法

嘿,这个问题问得很关键!在C语言里,单个&是按位与运算符,和咱们常用的逻辑与&&完全不是一回事儿,得把它俩区分清楚。

核心含义

按位与的作用是把两个整数操作数的二进制位逐一对应进行「与操作」:只有当对应位置的二进制位同时为1时,结果的该位才是1,否则为0。举个直观的例子:

// 5的二进制是 101,3的二进制是 011
int result = 5 & 3; // 结果是 001,也就是十进制的1

常见使用场景

按位与最常用在和「位掩码」配合的场景里:

  • 检查某一位是否为1:这是你给出的代码里的用法,也是最典型的场景
  • 清零特定二进制位:比如用x & ~mask可以把x中对应mask为1的位清零
  • 提取特定的二进制位段:通过构造合适的掩码,从整数中提取出我们需要的几位

你的代码示例详解

咱们来拆解你给出的这段代码:

printf( (fileStat.st_mode & S_IRUSR) ? "r" : "-");

这里的逻辑是这样的:

  1. fileStat.st_mode是stat结构体里的字段,存储了文件的权限信息,它的二进制位每一位对应不同的权限(比如用户读、用户写、用户执行等)
  2. S_IRUSR是系统定义的一个宏,它的二进制表示里只有「所有者读权限」对应的那一位是1,其他位全是0(相当于一个权限位的掩码)
  3. 当fileStat.st_mode & S_IRUSR的结果不等于0时,说明fileStat.st_mode中「所有者读权限」的位是1——也就是这个文件对所有者是可读的,这时候三元运算符返回"r",打印出来就是权限位的r
  4. 如果结果为0,说明该位是0,文件对所有者不可读,就打印"-"

小提醒

别把按位与&和逻辑与&&搞混:

  • &&是逻辑判断,只要操作数非0就视为真,返回的是布尔值(0或1)
  • &是直接操作二进制位,返回的是整数结果,哪怕结果非0,也可能是任何非零整数,不只是1

内容的提问来源于stack exchange,提问作者EmanRuoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:40:53