【算法数据结构初阶篇】:位运算

news/2024/12/2 15:57:11/

算法中很多情况下需要用到各种位运算的转换,比如>>右移、<<左移、&与等等,下面我们利用这些位运算来进行一个进制转换,将一个int整形(32位)十进制转二进制,以及其他的一些转换技巧。

一、十进制转换成32位的二进制

核心点就是将1进行左移操作,从高位32位开始依次向低位0位移动,分别与所需转换的整形数值做与运算 

一、代码:

public void printBinary(int num){//高位从右到左遍历,打印for(int i = 31; i >= 0 ; i--){//数值第一轮是与高位1做与运算, 两者为1 与 得1,一个不为1 与 得 0 System.out.print(num & (1 << i) == 0 ? 0 : 1)}
}

 二、代码解析:

  • 转换二进制,需要知道打印方向,从高位到低位,即从左往右依次打印
  • &与运算的技巧,  1  1 得 1,非1 得 0,所以原数值,若为1 , 与运算后仍为 1, 若为 0, 与运算后仍为0

二、位运算技巧

一、随用随记的特殊技巧

System.out.println((~-5)+1);  //5   -5的相反数为5  取反+1 
System.out.println((~5)+1);   //-5   5的相反数为-5  取反+1 
System.out.println(-1>>>1);   //2147483647  无符号右移,忽略最高位的符号位,即用0补齐最高位
System.out.println(-1>>1);    //-1         带符号右移,负数最高位符号位是 1, 右移后仍用1补齐
printBinary(-1);                    //打印-1二进制  11111111111111111111111111111111

 二、计算演练

一、负数二进制,计算转换得到其十进制:

例如计算机中二进制:11111111111111111111111111111011 ,表示的十进制为 -5 ,计算机内存中保存的都是补码,这个要清楚。 

首先符号位即最高位为1,表示为负数,那是负几,就将存数位(即去符号位后的31位)取反,再加1,得到的就是负数的相反数,前面有提到,~(-5)+1=5,得到了相反数后,再加上符号-,即位该二进制对应的十进制:

                                  (符号位)1     1 1 1... 1 1 0 1 1 

操作1:存数位取反                1     0  0  0... 0 0 1 0 0

操作2:存数位+1                    1     0  0  0... 0 0 1 0 1

这里得到的二进制,转换十进制  2^2+2^0 = 5,加入符号位,得到   -5

​​​​​​​


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

相关文章

【SpringCloud10】OpenFeign服务接口调用

1.概述 1.1OpenFeign是什么 官网 Feign是一个声明式WebService客户端&#xff0c;使用Feign能让编写Web Service客户端更加简单。 它的使用方法是定义一个服务接口然后在上面添加注解&#xff0c;Feign也支持可拔插式的编码器和解码器&#xff0c;Spring Cloud对Feign进行了…

用详细实例说明和典型案例实现对分治法进行全面分析 | C++

第一篇 分治法 目录 第一篇 分治法 ●前言 ●一、分治法是什么&#xff1f; 1.简要介绍 2.生活实例 ●二、分治法的典型案例——硬币问题 1.具体问题 2.代码展示&#xff08;C&#xff09; 3.程序代码结果展示 ●总结 前言 简单的来说&#xff0c;算法就是用计算机程序代…

Docker学习笔记

容器本质上是一个线程&#xff0c;相当于从物理机中开辟了一个空间&#xff0c;专门给到某个程序使用 镜像的本质是一个软件源&#xff0c;这个软件源往往还带有它的环境变量、配置信息 docker是一个管理容器的平台工具 当运行容器时&#xff0c;使用的镜像如果在本地中不存…

PostgreSQL数据库FDW——Parquet S3 DefaultParquetReader类

S3RandomAccessFile S3RandomAccessFile类定义在parquet_s3_fdw.hpp&#xff0c;用于访问s3对象存储的类。其成员函数定义在parquet_s3_fdw.cpp文件中&#xff0c;S3RandomAccessFile构造函数用于初始化private成员(offset设置为0&#xff0c;isclosed设置为false)。 class S…

yolov5+车道线检测

目标检测与车道线检测在自动驾驶以及车辆定位中起着重要的辅助作用&#xff0c;是环境感知中不可缺少的一个部分。基于深度学习的车道线检测方法近年来也在不断的提升&#xff0c;比如论文&#xff1a;Ultra Fast Deep Lane Detection with HybridAnchor Driven Ordinal Classi…

[ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

包体积优化 · 实战论 · 怎么做包体优化? 做好能晋升吗? 能涨多少钱?

“ 【小木箱成长营】包体积优化系列文章&#xff1a; 包体积优化 方法论 揭开包体积优化神秘面纱 包体积优化 工具论 初识包体积优化 BaguTree 包体积优化录播视频课 ”一、引言 Hello&#xff0c;我是小木箱&#xff0c;欢迎来到小木箱成长营系列教程&#xff0c;今天将分…

锁策略和synchronized

1.常见的锁策略&#xff08;1&#xff09;乐观锁 和 悲观锁乐观锁&#xff1a;预测锁竞争的情况不激烈&#xff08;工作量较少&#xff09;悲观锁&#xff1a;预测锁竞争的情况很激烈&#xff08;工作量较多&#xff09;&#xff08;2&#xff09;轻量级锁 和 重量级锁轻量级锁…