ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

C语言学习日记 · 位运算篇

C语言学习日记 · 位运算篇 C语言学习日记 · 位运算篇一、学习概述二、6 种位运算符详解1\. 按位与 2\. 按位或 |3\. 按位异或 ^经典应用 1找出唯一出现一次的数字经典应用 2无临时变量交换两个整数4\. 按位取反 ~5\. 左移 6\. 右移 三、掩码mask核心用法1\. 掩码概念2\. 三大标准操作3\. 常用掩码生成四、易错踩坑总结五、练习与验证一、学习概述本次学习了 C 语言全部 6 种位运算符这类运算直接操作整数的二进制每一位运算效率极高在底层开发、嵌入式寄存器操作、算法题中高频出现。所有位运算均基于整数的补码进行默认 32 位 int 类型参与运算。二、6 种位运算符详解1. 按位与运算规则对应二进制位全 1 才为 1有 0 则为 0核心用途保留指定位、清零指定位、判断某一位是否为 1示例6 30110 (6) 0011 (3) ---------- 0010 (2)常用写法判断数字 x 的第 n 位是否为 1if((x(1n))!0){// 第n位为1}2. 按位或|运算规则对应二进制位有 1 则为 1全 0 才为 0核心用途将指定位置为 1其余位保持不变示例6 | 30110 (6) | 0011 (3) ---------- 0111 (7)常用写法把 x 的第 n 位置 1xx|(1n);3. 按位异或^运算规则对应二进制位不同为 1相同为 0三大核心性质x ^ x 0相同数字异或直接抵消x ^ 0 x数字异或 0 等于自身满足交换律、结合律运算顺序不影响最终结果经典应用 1找出唯一出现一次的数字题目一组数字中只有 1 个数出现 1 次其余都出现 2 次找出这个数。输入示例5 7 6 6 5解法所有数字连续异或成对的数相互抵消为 0最终结果就是只出现一次的数演算过程完整代码#includestdio.hintmain(){intn1,n2,n3,n4,n5;scanf(%d%d%d%d%d,n1,n2,n3,n4,n5);intansn1^n2;ansans^n3;ansans^n4;ansans^n5;printf(消失的数字是:%d\n,ans);return0;}经典应用 2无临时变量交换两个整数初始值a13b9三步交换代码aa^b;ba^b;aa^b;逐行演算a 13^9 4此时a4, b9b 4^9 13b 拿到原 a 的值此时a4, b13a 4^13 9a 拿到原 b 的值最终a9, b13坑点提醒若 a 和 b 是同一个变量同一块内存执行后值会直接清零该写法可读性差实际工程更推荐用临时变量交换。4. 按位取反~运算规则单目运算符将二进制每一位0 变 11 变 0速算公式~a -(a 1)示例a10~10 -11完整原理32 位 int10 的原码00000000 00000000 00000000 00001010按位取反后11111111 11111111 11111111 11110101最高位为 1代表负数按补码规则换算后得到十进制值-11易错区分~和!运算符类型作用示例~按位取反操作每一个二进制位~10 -11!逻辑取反只判断真假非 0 变 00 变 1!10 05. 左移运算规则二进制整体向左移动 n 位高位丢弃低位补 0数值效果无溢出前提下左移 n 位等价于乘以 2 的 n 次方示例6 1 126 2 246. 右移运算规则二进制整体向右移动 n 位低位丢弃正数高位补 0负数高位补符号位算术右移主流编译器默认数值效果右移 n 位等价于除以 2 的 n 次方整数向下取整示例6 1 36 2 1三、掩码mask核心用法1. 掩码概念掩码是一个二进制模板数字配合位运算符可以精准操作指定的某一位或某几位同时完全不影响其他位是嵌入式、寄存器操作的核心手段。2. 三大标准操作操作代码掩码特点第 n 位置 1x x(1 n)掩码仅第 n 位为 1第 n 位清零x x ~(1 n)掩码仅第 n 位为 0其余全 1第 n 位翻转x x ^ (1 n)掩码仅第 n 位为 1^3. 常用掩码生成1 n只有第 n 位为 1其余为 0~(1 n)只有第 n 位为 0其余全 1~0所有二进制位全为 1 的通用掩码四、易错踩坑总结位运算不会修改原变量必须通过赋值保存结果例如单独写~a;不会改变 a 的值禁止用 4 位二进制脑补运算结果int 为 32 位高位全部参与运算正数取反必然得到负数异或交换变量有局限性不能用于同一个变量、浮点数工程开发优先使用临时变量移位运算符优先级低于加减运算复杂表达式注意加括号~是按位取反!是逻辑取反二者功能完全不同不可混用五、练习与验证口算~5的结果是多少口算数字2 3 2 4 4全部异或最终结果是多少写代码将整数 x 的第 3 位清零其余位保持不变。
返回列表