算法通关村-----位运算的规则

1 数字在计算机中的表示

机器数:一个数在计算机中的二进制表示

真值:带符号位的机器数对应的真正数值

机器数可分为原码、反码和补码。

原码:符号位加上真值的绝对值

反码:正数的反码是其本身,负数的反码的在其原码的基础上,符号为不变,其余各个位取反

补码:正数的补码是其本身,负数的补码是在其原码的基础上,符号位不变,其余各个位取反再加一(在反码的基础上加一)

注:正数的原码、反码、补码都是其本身。引入补码是为了在计算机底层统一加减法运算为加法,便于运算

2 位运算规则

2.1 与、或、异或、取反

与运算的符号是&,运算规则是,对于每个二进制位,当两个数对应的为都为1时结果才为1,否则结果为0。

java 复制代码
0 & 0 = 0;
0 & 1 = 0;
1 & 0 = 0;
1 & 1 = 1;

或运算的符号是|,运算规则是,对于每个二进制位,当两个数对应的位都为0时结果才为0,否则结果为1。

java 复制代码
0 |0 = 0;
0 |1 = 1;
1 |0 = 1;
1 |1 = 1;

异或运算的符号是^,运算规则是,对于每个二进制位,当两个数对应的位相同时为0,不同时为1

java 复制代码
0 ^ 0 = 0;
0 ^ 1 = 1;
1 ^ 0 = 1;
1 ^ 1 = 0;

2.2 移位运算

左移运算的符号是<<,将全部的二进制位向左移动若干位,高位丢弃,低位补0,对于左移运算,算术左移和逻辑左移是相同的

右移的运算符号是>>,右移运算时,将全部的二进制位向右移动若干位,低位丢弃,高位的处理取决于世算数右移还是逻辑右移,算数右移时,最高位补最高位,逻辑右移时,最高位补0.

移位运算与乘除法的关系

对于正数和0,将一个数左移K位,等价于将这个数乘以2的K次方。将一个数右移K位,等价于将这个数除以2的K次方

2.3 位运算定律

2.4 位运算技巧

获取

将1左移i位后,与num进行与运算,从而将i位之外的所有位清零,最后返回结果是否为0

java 复制代码
public boolean getBit(int num, int i) {
	return (num & (1 << i)) !=0;
}

置1

将某一位设置为1,可以将1左移i位后,与number进行或运算

java 复制代码
public int setBit(int num, int i) {
   return (num | (1 << i));
}

清零

将某一位设置为0,可以将1左移i位后取反,与number进行与运算

java 复制代码
public int clearBit(int num, int i) {
    return (num & ~(1 << i));
}

更新

先将num清零,然后将待设置值v左移i位,与num进行或运算

java 复制代码
public int updateBit(int num, int i, int v) {
   return (num & ~(1 << i)) | (v << i);
}
相关推荐
我命由我123454 小时前
Android 开发问题:MlKitException: An internal error occurred during initialization.
android·java·java-ee·android jetpack·android-studio·androidx·android runtime
CS创新实验室4 小时前
从顺序表到动态数组:数据结构的永恒基石与现代语言的优雅封装
数据结构·算法
888CC++4 小时前
java 并发编程
java·开发语言·python
无风听海5 小时前
JSON Web Token(JWT)完全指南
java·前端·json
Black蜡笔小新5 小时前
自动化AI算法训练服务器DLTM训推一体化平台助力农业生产管理实现安全智能化
人工智能·算法·自动化
JAVA社区5 小时前
Java高级全套教程(十一)—— Kubernetes 超详细企业级实战详解
java·运维·微服务·容器·面试·kubernetes
8Qi85 小时前
LeetCode 23. 合并 K 个升序链表 —— 小顶堆(PriorityQueue)
数据结构·算法·leetcode·链表·
QiLinkOS6 小时前
《打破“用爱发电”:一种基于 Gitee 与时间戳的开源权益分配机制探索》
c语言·数据结构·c++·科技·算法·gitee·开源
松间听晚6 小时前
Agentic RL 环境和代码学习:以HGPO为例
算法
智者知已应修善业6 小时前
【51单片机用T0定时器方式1,实现0.5S的时间间隔实现第一次一个灯亮、第二次二个灯亮,直到全部灯亮,然后重复整个过程】2023-12-29
c++·经验分享·笔记·算法·51单片机