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

简介: 正数和负数需转换成二进制后进行移位运算。左移低位补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
3083 7
|
算法 Python
利用Python判断一个数是否为完全平方数
利用Python判断一个数是否为完全平方数
1584 0
markdown常用语法--花括号(超详细)
markdown常用语法--花括号(超详细)
|
3月前
|
缓存 NoSQL Java
[006][缓存模块] 两级缓存实战:基于 Caffeine + Redis 的多级缓存设计与实现
本文介绍基于Caffeine(本地)+ Redis(分布式)的两级缓存实战方案,通过自定义`MultiLevelCache`与`MultiLevelCacheManager`,实现Spring Cache标准接口下的透明多级缓存:读优先本地(纳秒级)、未命中查Redis并回填;写同步更新两级,兼顾高性能与数据共享。代码开源可直接集成。
350 0
|
11月前
|
虚拟化 数据安全/隐私保护
VMware Workstation Pro - 最新版
VMware是一款强大的虚拟机软件,可在单台计算机上模拟完整硬件系统,实现多系统运行。2024年5月推出最新版Workstation Pro 17.5.2,个人用户可免费使用。用户可通过官网下载并注册账户,按指引完成安装,适用于开发、测试及部署应用,具备高效灵活的虚拟化技术。
44722 1
|
机器学习/深度学习
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
本文探讨了深度可分离卷积和空间可分离卷积,通过代码示例展示了它们在降低计算复杂性和提高效率方面的优势。
3698 2
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
|
算法 C++
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】 目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二叉排序树的基本算法。 相关知识 为了完成本关任务,你需要掌握:二叉树的创建、查找和删除算法。具体如下: (1)由关键字序列(4,9,0,1,8,6,3,5,2,7)创建一棵二叉排序树bt并以括号表示法输出。 (2)判断bt是否为一棵二叉排序树。 (3)采用递归方法查找关键字为6的结点,并输出其查找路径。 (4)分别删除bt中关键
514 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),并通过图解展示了各组件的工作流程。欢迎指正。

热门文章

最新文章