当前位置: 首页 > ai >正文

solidity中sar和>>的区别

sar和>>都是右移操作,其区别简而言之前者保留符号位,后者不保留。要解释清楚这个问题,需要从有符号数和无符号数讲起:

有符号数和无符号数

打个比方int8和uint8 

  • uint8(无符号 8 位整数)

    • 取值范围:0 ~ 255
    • 最高位只是数值的一部分,没有符号意义
  • int8(有符号 8 位整数)

    • 取值范围:-128 ~ 127
    • 最高位(第 8 位)是符号位:0 表示正数,1 表示负数

这二者的取值范围是由交集的也就是0~ 127,在这个范围内其而二进制表示是完全相同的。

但是当最高位变成1时,则有所不同:

打个比方一个有符号整数-5的二进制表示步骤如下:

  1. 先写出 5 的二进制:0000 0101
  2. 取反:1111 1010
  3. 加1:1111 1011

-5 在 int8 中二进制表示就是1111 1011

而同样的二进制表示如果是无符号整数则代表251

区别总结

到这里sar和>>的区别就显而易见了:

操作适用类型名称高位补什么能否保留符号典型用途
sar(n,value)有符号整数算术右移补符号位(0或1)int128/int256 等有符号数的右移、提取高位
value >> n无符号整数逻辑右移补0uint128/uint256 等无符号数的右移

打个比方:

原始值二进制适用右移方案逻辑右移2位(>>)结果
-5(int8)11111011sar11111110-2
251(int8)11111011>>0011111062

所有当遇到有符号整数需要保留符号位的时候使用sar操作,否则使用>>

http://www.xdnf.cn/news/12305.html

相关文章:

  • C++.OpenGL (1/64) 创建窗口(Hello Window)
  • 解决cocos 2dx/creator2.4在ios18下openURL无法调用的问题
  • 408第一季 - 数据结构 - 线性表
  • React源码阅读-fiber核心构建原理
  • 解决获取视频第一帧黑屏问题
  • figma 和蓝湖 有什么区别
  • win中将pdf转为图片
  • 使用 Python 自动化 Word 文档样式复制与内容生成
  • 应用案例 | 设备分布广, 现场维护难? 宏集Cogent DataHub助力分布式锅炉远程运维, 让现场变“透明”
  • 32单片机——基本定时器
  • NVIDIA Dynamo:数据中心规模的分布式推理服务框架深度解析
  • 深入了解JavaScript当中如何确定值的类型
  • 第二十八章 RTC——实时时钟
  • 使用 Ansible 在 Windows 服务器上安装 SSL 证书
  • Neo4j 集群管理:原理、技术与最佳实践深度解析
  • 基于J2EE架构的在线考试系统设计与实现【源码+文档】
  • Keepalived双主模式的高可用性解决方案!
  • caliper config.yaml 文件配置,解释了每个配置项的作用和注意事项
  • 越狱蒸馏-可再生安全基准测试
  • 七、数据库的完整性
  • mysql+keepalived
  • 李沐《动手学深度学习》d2l安装教程
  • pikachu靶场通关笔记17 CSRF关卡03-CSRF(Token)
  • Java持久层技术对比:Hibernate、MyBatis与JPA的选择与应用
  • 重构城市应急指挥布控策略 ——无人机智能视频监控的破局之道
  • 【HarmonyOS 5】教育开发实践详解以及详细代码案例
  • 抽象工厂模式深度解析:从原理到与应用实战
  • ​​高频通信与航天电子的材料革命:猎板PCB高端压合基材技术解析​​
  • CentOS 7 如何安装llvm-project-10.0.0?
  • Matlab实现任意伪彩色图像可视化显示