基础知识及二进制常见用法
- 前言
bit是度量信息的单位,包含0和1两种状态。计算机的各种运算最后无不归结位一个个bit的变化。熟练掌握并利用位运算,能够帮助我们理解程序运行中的种种表现,提高程序循行的时空效率,降低编程复杂度。
- 运算符优先级
从左到右优先级依次降低
加减 移位 比较大小 位与 异或 位或 +,- <<,>> <,>==,!= & xor(C++^) |
- 位与memset
我们都知道,memset可以以字节为单位初始化变量或者数组,这里有几个特>别的数字:
- 0x3F3F3F3F 1061109567
-> 0x7F7F7F7F 2147483647- 0xFFFFFFFF -1
观察这几个数字,我们会发现0x3F3F3F3F是个很有用的数字,原因如下:
- 可以直接用memset初始化
- 0x3F3F3F3F的两倍不会超过int的最大范围
- 这个数足够大
这也是常常使用INF = 0x3F3F3F3F的原因
memset(a,0x3f,sizeof a);
- 移位运算
>> << 即除以2向下取整 1 < < n = 2 n , n < < 1 = 2 ∗ n 1<<n = 2^{n} , n<<1 = 2 * n 1<<n=2n,n<<1=2∗n
例题:
- 二进制状态压缩
二 进 制 状 态 压 缩 , 是 指 将 一 个 长 度 为 m 的 b o o l 数 组 用 一 个 m 位 的 二 进 制 整 数 表 示 {\color{Red} 二进制状态压缩,是指将一个长度为m的bool数组用一个m位的二进制整数表示} 二进制状态压缩,是指将一个长度为m的bool数组用一个m位的二进制整数表示
并 储 存 的 方 法 。 利 用 下 列 位 运 算 操 作 可 以 实 现 原 b o o l 数 组 中 对 应 下 标 的 存 取 。 {\color{Red} 并储存的方法。利用下列位运算操作可以实现原bool数组中对应下标的存取。} 并储存的方法。利用下列位运算操作可以实现原bool数组中对应下标的存取。