【编程基础知识】正数负数的二进制位运算(左移 右移 无符号右移)

简介: 正数和负数需转换成二进制后进行移位运算。左移低位补0,不影响符号位;右移符号位跟随移动,最高位还原为原符号位;无符号右移高位补0,适用于负数处理。

⭐⭐⭐正数和负数需先转换成相应的二进制,再进行移位运算.详细举例如下🌙🌙🌙:
1、左移(向左移动,低位补0,没有无符号左移,因为左移不影响符号位):
(1)正数左移 2<<1

(a)2为正数,其原码反码和补码均 00000000 00000000 00000000 00000010
(b)00000000 00000000 00000000 00000010 <<1 = 00000000 00000000 00000000 00000100 = 4

(2)负数左移 -2<<1

(a)-2原码 10000000 00000000 00000000 00000010
(b)-2反码 11111111 11111111 11111111 11111101
(c)-2补码 11111111 11111111 11111111 11111110 
(d)11111111 11111111 11111111 11111110 <<1 = 11111111 11111111 11111111 11111100
(e)11111111 11111111 11111111 11111100低位减1=11111111 11111111 11111111 11111011
(f)11111111 11111111 11111111 11111011取反=10000000 00000000 00000000 00000100= -4

2、右移(符号位先跟着向右移动完之后,最高位再还原为原符号位):
(1)正数右移 2>>1

(a)2为正数,其原码反码和补码均 00000000 00000000 00000000 00000010
(b)00000000 00000000 00000000 00000010 >>1 = 00000000 00000000 00000000 00000001 = 1

(2)负数右移 -2>>1

(a)-2原码 10000000 00000000 00000000 00000010
(b)-2反码 11111111 11111111 11111111 11111101
(c)-2补码 11111111 11111111 11111111 11111110 
(d)11111111 11111111 11111111 11111110 >>1=11111111 11111111 11111111 11111111(负数,需转换)
(e)11111111 11111111 11111111 11111111低位减1=11111111 11111111 11111111 11111110
(f)11111111 11111111 11111111 11111110取反=10000000 00000000 00000000 00000001= -1

2、无符号右移(向右移动,高位补0,符号位也跟着移动,主要针对负数):
(1)正数无符号右移 2>>>1(由于右移不影响正数符号位,故与正数右移结果一致)
...省略,具体参考正数右移...
(2)负数无符号右移 -2>>>1

(a)-2原码 10000000 00000000 00000000 00000010
(b)-2反码 11111111 11111111 11111111 11111101
(c)-2补码 11111111 11111111 11111111 11111110 
(d)11111111 11111111 11111111 11111110 >>>1 = 01111111 11111111 11111111 11111111(正数,不需转换)
(e)01111111 11111111 11111111 11111111=2^0+2^1+2^2+...+2^30
(f)设s=2^0+2^1+2^2+...+2^30
    2s=2^1+2^1+2^2+...+2^30+2^31
   则2s-s=2^31-2^0=2^31-1=2,147,483,648 - 1 = 2,147,483,647
目录
相关文章
|
XML Java 数据库
探索 Spring Boot 中的 @Configuration 注解:核心概念与应用
【4月更文挑战第20天】在 Spring Boot 项目中,@Configuration 注解扮演了一个关键角色,它标识一个类作为配置源,这些配置用于定义和管理 Spring 应用程序中的 Bean
3109 7
|
5月前
|
缓存 NoSQL Java
[006][缓存模块] 两级缓存实战:基于 Caffeine + Redis 的多级缓存设计与实现
本文介绍基于Caffeine(本地)+ Redis(分布式)的两级缓存实战方案,通过自定义`MultiLevelCache`与`MultiLevelCacheManager`,实现Spring Cache标准接口下的透明多级缓存:读优先本地(纳秒级)、未命中查Redis并回填;写同步更新两级,兼顾高性能与数据共享。代码开源可直接集成。
398 0
|
机器学习/深度学习 存储 算法
动态规划算法深度解析:0-1背包问题
0-1背包问题是经典的组合优化问题,目标是在给定物品重量和价值及背包容量限制下,选取物品使得总价值最大化且每个物品仅能被选一次。该问题通常采用动态规划方法解决,通过构建二维状态表dp[i][j]记录前i个物品在容量j时的最大价值,利用状态转移方程避免重复计算子问题,从而高效求解最优解。
1111 1
|
机器学习/深度学习
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
本文探讨了深度可分离卷积和空间可分离卷积,通过代码示例展示了它们在降低计算复杂性和提高效率方面的优势。
3719 2
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
|
算法 C++
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】 目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二叉排序树的基本算法。 相关知识 为了完成本关任务,你需要掌握:二叉树的创建、查找和删除算法。具体如下: (1)由关键字序列(4,9,0,1,8,6,3,5,2,7)创建一棵二叉排序树bt并以括号表示法输出。 (2)判断bt是否为一棵二叉排序树。 (3)采用递归方法查找关键字为6的结点,并输出其查找路径。 (4)分别删除bt中关键
552 11
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
|
机器学习/深度学习 数据库 索引
Transformer 学习笔记 | Encoder
本文记录了学习Transformer模型过程中对Encoder部分的理解,包括多头自注意力机制(Multi-Head Self-Attention)和前馈网络(Feed-Forward Network)的工作原理。每个Encoder Layer包含残差连接(Residual Connection)和层归一化(Layer Normalization),以缓解梯度消失问题并稳定训练过程。文中详细解释了Q、K、V的含义及缩放点积注意力机制(Scaled Dot-Product Attention),并通过图解展示了各组件的工作流程。欢迎指正。
|
测试技术
notepad++安装HexEditor插件查看二进制文件
有时候我们需要分析二进制文件,但是分析二进制文件直接用编辑器查看会出现乱码的情况,本文在 notepad++ 软件上安装一个 HexEditor 插件,可方便分析二进制文件。
1912 0
|
存储 网络协议 机器人
车载以太网权威指南阅读笔记
车载以太网权威指南阅读笔记

热门文章

最新文章