[枚举坤坤]二进制枚举基础

news2024/10/23 11:47:20

我们都知道数据是以二进制形式存储在计算机中的。当我们使用十进制数进行编程时(如a=10)实际上计算机要先进行一步转码,将其化为二进制的形式进行计算。如果在编程的过程中我们可以直接越过转码这一步去操纵二进制形式进行运算,程序运行速度就会变得更快。

位运算的基本符号:

&(按位与)

—— 左右两边都是1,答案就是1.(与条件&&的判定是一致的)

0&1 =0;

0&0 =0;

1&0 =0;

1&1 = 1;

7&28 = 4 ( 00111 & 11100 = 00100 )

&运算通常用于二进制取位操作,例如一个数 &1的结果就是取二进制的最末位。

这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数是偶数,最末位为1表示该数为奇数。

|(按位或)

—— 左右两边有1,答案就是1(与条件||的判定是一致的)

0|0=0;

0|1=1;

1|0=1;

1|1=;

7|28=31 ( 00111 | 11100 = 11111 )

|运算通常用于二进制特定位上的无条件赋值,例如一个数|1的结果就是把二进制最末位强行变为1。

如果需要把二进制最末位变成0,对这个数|1之后再减一就可以了,其实际意义就是把这个数强行变成最近接的偶数。

^(按位异或)

—— 左右两边相同为0,不同为1

0^1=1;

1^0=1;

1^1=0;

0^0=0;

7^28 = 27 ( 00111 ^ 11100 = 11011 )

^运算通常用于对二进制的特定一位进行取反操作,^运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(a^b)^b=a;

^运算可以用于简单的加密,

比如原始值int a = 19880516; 密钥 int key =1314520;

进行加密 int data = key^a = 20665500;解密 data^key == a;

^运算还可以实现两个值的交换而不需要中间变量。

~(取反)

—— ~运算的定义把内存中的0和1全部取反,所以~运算时要格外小心,你需要注意整数类型有没符号,如果~的对象是无符号整数(不能表示负数),那么他的值就是它与它的上界限的之差。(参考之前的原码、反码、补码)

位移运算

<<运算(左移运算)

a<<b 表示把a转为二进制后左移b位(在后面添加 b个0)。

例如100的二进制表示为1100100,100左移2位后(后面加2个零):

1100100<<2 =110010000 =400;

可以看出,a<<b的值实际上就是a乘以2的b次方(即左移几次乘几次2),因为在二进制数后面添加一个0就相当该数乘以2,2个零即2的2次方等于4。通常认为a<<1比a*2更快,因为前者是更底层一些的操作。因此程序中乘以2的操作尽量用左移一位来代替。

>>运算(右移运算)

和 << 相似,a >> b表示二进制右移 b 位(去掉末 b 位)。

相当于a除以2的b次方(取整)(即右移几次除以几次2,取整数)。我们经常用>>1来代替/2,比如二分查找、堆的插入操作等等。想办法用>>代替除法运算可以使程序的效率大大提高,效率可以提高60%。

int a =100;

a/4 == a>>2;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2221551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EMNLP 2024 个性化/风格化 文本生成 论文汇总(19篇主会论文)

引言&#xff1a;调研&#xff0c;搬砖… &#x1f60a; &#x1f318;&#x1f317;&#x1f316; &#x1f607; ✅ 笔者简介&#xff1a;Wang Linyong&#xff0c;NPU&#xff0c;2023级&#xff0c;计算机技术 研究方向&#xff1a;文本生成、大语言模型 文章目录 1 Perso…

【C++】STL----map和set

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;C从小白到高手 &#x1f339;往期回顾&#x1f339;&#xff1a;[C]二叉搜索树 &#x1f516; 流水不争&#xff0c;争的是滔滔不息 文章目录 一、set和map的简介setm…

Java设计模式梳理:行为型模式(策略,观察者等)

行为型模式 行为型模式关注的是各个类之间的相互作用&#xff0c;将职责划分清楚&#xff0c;使得我们的代码更加地清晰。 策略模式 策略模式太常用了&#xff0c;所以把它放到最前面进行介绍。它比较简单&#xff0c;我就不废话&#xff0c;直接用代码说事吧。 下面设计的…

某ai gpt的bug

某ai gpt的bug 背景 遇到了一个奇怪的现象&#xff1a; 输入内容 2024-10-21 10:09:31,052 ERROR o.a.j.t.JMeterThread: Test failed! java.lang.IllegalArgumentException:输出结果

Android开发教程二维码扫描功能

Android开发教程二维码扫描功能 二维码扫描大一点的app都有的功能&#xff0c;因为扫一下真的很方便 一、思路&#xff1a; 用zxing库 二、效果图&#xff1a; 看视频更加直观点&#xff1a; Android开发教程实战案例源码分享-二维码扫描功能 三、关键代码&#xff1a; c…

音频声音怎么调大?将音频声音调大的几个简单方法

音频声音怎么调大&#xff1f;在现代生活中&#xff0c;音频内容无处不在&#xff0c;从在线课程和播客到音乐和电影&#xff0c;音频已经成为我们获取信息和娱乐的重要方式。然而&#xff0c;许多人在使用音频时可能会遇到一个常见问题&#xff1a;音频声音太小&#xff0c;无…

手机投屏到电脑上的scrcpy软件 scrcpy v2.4

下载&#xff1a;https://drive.uc.cn/s/b1285b1fb9f94?public1 最近的工作需要用到用手机演示一些操作&#xff0c;但是手机屏幕比较小&#xff0c;我就想把手机投到我的电脑上&#xff0c;然后电脑连接投影仪就行了。 scrcpy是一款开源的软件&#xff0c;在githus上可以下…

少儿编程学习,如何走,之点评一二

前言&#xff1a; 不少孩子在少儿机构学习编程的家长跟我反馈&#xff0c;机构学习孩子学了记不住&#xff0c;有些家孩子索性就不去&#xff0c;不愿意再谈编程学习之事。 从一位专业信息学教师出身的老师&#xff0c;稍作点评一二&#xff1a; 【同时也引用了一些主流媒体的…

力扣OJ算法题:合并两个有序链表

—————————————————————————————————————————— 正文开始 OJ算法题&#xff1a;合并两个有序链表 思路 创建一个新的空链表&#xff08;可以用malloc优化&#xff09;和两个指针L1、L2分别指向两个链表&#xff0c;遍历两个链表&am…

python poetry包管理的安装和使用

目录 设置国内(清华)镜像源和升级pip 安装poetry pycharm中使用 常用的poetry命令 本文背景为已经安装好python 设置国内(清华)镜像源和升级pip pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple python -m pip install --upgrade pip 安装po…

【峟思仪器】高边坡安全监测起到哪些作用

高边坡安全监测起到哪些作用?在当今的工程建设领域&#xff0c;高边坡监测犹如一道坚实的安全防线&#xff0c;其重要性不容小觑。无论是大型水利工程&#xff0c;还是交通基础设施建设&#xff0c;高边坡的稳定性都直接关系到工程的安全和周边环境的安危。高边坡监测在工程建…

在Debian上安装向日葵

说明&#xff1a; 因为之前服务器上安装了 PVE (Proxmox VE)&#xff0c;之前是用 Proxmox VE 进行服务器资源管理的。出于某些原因&#xff0c;现在不再通过 PVE构建的虚拟机来使用计算资源&#xff0c;而是通过 PVE 自带的 Debian 系统直接使用虚拟机资源&#xff08;因为积…

使用Python抓取房源信息

1. 引言 在当今大数据时代&#xff0c;网络爬虫成为获取信息的重要手段之一。本文将以某家二手房为例&#xff0c;演示如何使用Python爬虫抓取房源信息&#xff0c;并将这些信息保存到Excel文件中。 目标网站 2. 准备工作 2.1 安装必要的库 在开始之前&#xff0c;请确保你…

银行客户贷款行为数据挖掘与分析

#1024程序员节 | 征文# 在新时代下&#xff0c;消费者的需求结构、内容与方式发生巨大改变&#xff0c;企业要想获取更多竞争优势&#xff0c;需要借助大数据技术持续创新。本文分析了传统商业银行面临的挑战&#xff0c;并基于knn、逻辑回归、人工神经网络三种算法&#xff0…

【在Linux世界中追寻伟大的One Piece】Socket编程UDP

目录 1 -> UDP网络编程 1.1 -> V1版本 -echo server 1.2 -> V2版本 -DictServer 1.3 -> V2版本 -DictServer(封装版) 1 -> UDP网络编程 1.1 -> V1版本 -echo server 简单的回显服务器和客户端代码。 备注&#xff1a;代码中会用到地址转换函数。 noc…

Java面试题库——多线程

1.并行和并发有什么区别&#xff1f; 并行&#xff1a;是指两个或多个事件在同一时刻发生&#xff0c;是在不同实体上的多个事件&#xff1b; 并发&#xff1a;是指两个或多个事件在同一时间间隔发生&#xff0c;是同一实体上的多个事件。2.线程和进程的区别&#xff1f; 根本…

数据结构修炼——常见的排序算法:插入/希尔/选择/堆排/冒泡/快排/归并/计数

目录 一、常见的排序算法二、常见排序算法的实现2.1 排序算法回顾2.1.1 冒泡排序2.1.2 堆排序 2.2 直接插入排序2.3 希尔排序2.4 选择排序2.5 快速排序2.5.1 快速排序&#xff08;霍尔法&#xff09;2.5.2 快速排序&#xff08;挖坑法&#xff09;2.5.3 快速排序&#xff08;前…

极客wordpress模板

这是一个展示WordPress主题的网页设计。页面顶部有一个导航栏&#xff0c;包含多个选项&#xff0c;如“关于我们”、“产品中心”、“案例展示”、“新闻动态”、“联系我们”和“技术支持”。页面中间部分展示了多个产品&#xff0c;每个产品都有一个图片和简短的描述。页面下…

【Linux】冯诺依曼体系结构 OS的概念

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;青果大战linux 总有光环在陨落&#xff0c;总有新星在闪烁 前言废话&#xff1a…

动态链接过程分析

目录 一、前言二、示例程序三、动态库的加载过程1、动态链接器加载动态库2、动态库的加载地址 四、符号重定位1、全局符号表2、全局偏移表 GOT3、liba.so 动态库文件的布局4、liba.so 动态库的虚拟地址5、GOT 表的内部结构6、反汇编 liba.so 代码 五、补充1、延迟绑定 plt 上文…