2026-10-21 12:04:42
在编程中,“&”与“&&”虽然都用于“与”操作,但用法有本质区别,正确使用需结合场景需求,以下是具体分析:
一、核心区别检查特定位是否为1:
int num = 5; // 二进制 0101int mask = 1; // 二进制 0001if ((num & mask) == 1) { printf("最低位为1"); // 会执行,因 0101 & 0001 = 0001}权限控制:假设权限用4位二进制表示(读=1,写=2,执行=4,删除=8),检查用户是否有“写”权限:
int user_permissions = 6; // 二进制 0110(读+写)int write_permission = 2; // 二进制 0010if ((user_permissions & write_permission) == write_permission) { printf("用户有写权限"); // 会执行}成绩合格判断:
int grade = 65;if (grade > 60 && grade < 70) { System.out.println("合格"); // 会执行}短路特性应用:避免调用可能引发异常的方法:
String str = null;if (str != null && str.length() > 0) { // 若 str 为 null,不执行 str.length() System.out.println("字符串非空");}错误示例:
int a = 0, b = 10;if (a != 0 & b / a > 1) { // 即使 a=0,仍会计算 b/a,引发除零错误 printf("错误逻辑");}正确写法:
if (a != 0 && b / a > 1) { // a=0 时直接短路,不计算 b/a printf("正确逻辑");}明确操作对象是二进制位还是布尔值。
在条件判断中优先使用“&&”,除非需强制计算所有条件(如统计条件计算次数)。