数据结构与算法基础-二进制运算性质及相关算法

news/2024/12/13 16:49:25/

二进制运算性质及相关算法

  • 1 几个与码相关的术语
  • 2 位运算概述
  • 3 位运算符的运算率
    • 1. 交换律
    • 2. 结合律
    • 3. 等幂律
    • 4.零律
  • 4 位运算的高级操作

1 几个与码相关的术语

原码 : 以二进制形式在计算机中存储,数值前直接加一符号位的表示法 1表示负数 0 表示正数

反码 : 正数的反码与原码相同;负数的反码,符号位为 1 1 1,数值部分按位取反。

补码 : 正数的补码和原码相同;负数的补码则是符号位为 1 1 1,数值部分按位取反后再在末位(最低位)加 1 1 1,也就是反码 + 1 +1 +1

这里以数字7为例

int main()
{// 0111 1111  1111 1111  1111 1111 1111 1111//整数是以源码的形式存储 表示-10int num = 0x0000000A;cout << num << endl;// 负数是以补码的形式存储 -10的表示 补码是原码 按位取反加1num = ~(0x0000000A)+1;//cout << num << endl;int bitNum = 0x07;cout <<  bitNum << endl;// 7bitNum = (~bitNum) + 1;cout <<  bitNum << endl; // -7return 0;
}

2 位运算概述

符号描述运算规则
|按位或两位都是0时结果才是0
&按位与两位都是1时结果才是1
^按位异或两位相同为 0 不同为 1
>>右移低位丢弃 高位补0
<<左移高位丢弃 低位补0

3 位运算符的运算率

1. 交换律

a a a ∣ | b b b ∣ | c c c = = = b b b ∣ | a a a ∣ | c c c

a a a ^ b b b ^ c c c = = = b b b ^ a a a ^ c c c

a a a & \& & b b b & \& & c c c = = = b b b & \& & a a a & \& & c c c

2. 结合律

a a a ∣ | b b b ∣ | c c c = = = a a a ∣ | ( b (b (b ∣ | c ) c) c)

a a a ^ b b b ^ c c c = = = b b b ^ ( a (a (a ^ c ) c) c)

a a a & \& & b b b & \& & c c c = = = b b b & \& & ( a (a (a & \& & c ) c) c)

3. 等幂律

A & A & A = A A \& A \& A = A A&A&A=A
A ∣ A ∣ A = A A | A | A = A AAA=A

4.零律

A ˆ A = 0 A \^\ A = 0 A ˆA=0
A ˆ 0 = A A \^\ 0 = A A ˆ0=A
A & 0 = 0 A \&\ 0 =0 A& 0=0

A ∣ 0 = A A|0=A A∣0=A
A ∧ 0 = A A∧ 0 = A A0=A

int main()
{cout << (3 | 2 | 4) << endl;cout << (2 | 3 | 4 ) << endl;cout << (3 & 2 & 4) << endl;cout << (2 & 3 & 4 ) << endl;cout << (2 ^ 3 ^ 4) << endl;cout << (3 ^ 2 ^ 4) << endl;cout << (10 & 10 & 10) << endl;cout << (10 | 10 | 10) << endl;cout << (10 ^ 10) << endl;
}

4 位运算的高级操作

功能位运算
去掉最后一位X >> 1
在最后加一个0X << 1
在最后加一个1X << 1 + 1
最后一位变1X | 1
最后一位变0X | 1 - 1
最后一位取反X ^ 1
把右数第k位变为1X ^ ( 1 << (k - 1))
把右数第k位变为1X ^ ( 1 << (k - 1))
把右数第k位变为0X & ~( 1 << (k - 1))

http://www.ppmy.cn/news/1021986.html

相关文章

bootloader跳转APP注意事项

在gd32f427 时跳转异常 参考文章&#xff1a; https://club.rt-thread.org/ask/question/425321.html%20https:/club.rt-thread.org/ask/question/eab19452583b5959.html https://club.rt-thread.org/ask/question/eab19452583b5959.html 关闭全部中断&#xff0c;并且清除中…

力扣初级算法(旋转矩阵)

力扣初级算法(旋转矩阵) 每日一算法&#xff1a;旋转矩阵 学习内容&#xff1a; 1.问题&#xff1a; 给你一幅由 N N 矩阵表示的图像&#xff0c;其中每个像素的大小为 4 字节。请你设计一种算法&#xff0c;将图像旋转 90 度。 不占用额外内存空间能否做到&#xff1f; 2.…

人工智能行业岗位一览

人工智能行业的岗位薪资高、待遇好、涨薪快已经是公开的事实&#xff0c;那么在人工智能行业中具体有哪些职业岗位呢&#xff1f;对于普通人来说&#xff0c;想要入行人工智能又有哪些机会呢&#xff1f; 下面是人工智能领域中的一部分职业岗位&#xff0c;随着技术的不断发展&…

uniapp uni-datetime-picker 日期和光标靠右

如果想在uni-datetime-picker组件中将日期和光标靠右&#xff0c;您可以使用自定义样式来实现。首先&#xff0c;您需要在页面的样式文件中定义一个类&#xff0c;用于定制uni-datetime-picker组件的样式。例如&#xff0c;你可以在App.vue或者页面的样式文件中添加以下代码&am…

苍穹外卖day11笔记

今日首先介绍前端技术Apache ECharts&#xff0c;说明后端需要准备的数据&#xff0c;然后讲解具体统计功能的实现&#xff0c;包括营业额统计、用户统计、订单统计、销量排名。 一、ECharts 是什么 ECharts是一款基于 Javascript 的数据可视化图表库。我们用它来展示图表数…

CV大一统模型的第一步!Segment Anything Model 最全解读!

Datawhale干货 作者&#xff1a;崔腾松&#xff0c;Datawhale成员 前言 Meta 开源万物可分割 AI 模型&#xff1a;segment anything model (SAM)。 本文列举了一些资料&#xff0c;并从SAM的功能介绍、数据集、数据标注、图像分割方法介绍&#xff0c;研发思路以及对未来的展望…

strlen和sizeof的区别

strlen 和 sizeof 是两个在C语言中用于处理字符串和数据类型大小的操作符&#xff0c;它们有一些重要的区别&#xff1a; 1. **strlen**&#xff1a; - strlen 是一个函数&#xff0c;用于计算以 null 终止的字符串的实际长度&#xff0c;即字符数&#xff08;不包括 null …

mysql基础之触发器的简单使用

1.建立学生信息表 -- 触发器 -- 建立学生信息表 create table s1(id int unsigned auto_increment,name varchar(30),score tinyint unsigned,dept varchar(50),primary key(id) );2.建立学生补考信息表 -- 建立学生补考信息表 create table s2 like s1;3.建立触发器&#xf…