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

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.lqws.cn/news/195103.html

相关文章:

  • 新版双紫擒龙、紫紫红黄、动能二号源码指标源码公式讲解
  • Linux 初始化与服务管理全解析:rc.d、systemctl与service对比
  • 《ERP原理与应用教程》第3版习题和答案
  • 高等数学》(同济大学·第7版)第二章第一节“导数的概念“
  • 软件测试:质量保障的基石与未来趋势
  • 技术突破与落地应用:端到端 2.0 时代辅助驾驶TOP10 论文深度拆解系列【第一篇(排名不分先后)】
  • leetcode_206 反转链表
  • 【设计模式-5】设计模式的总结
  • 【办公类-104-01】20250606通义万相50分一天用完,通义万相2.1专业版测试
  • Guava LoadingCache 使用指南
  • Beckhoff(倍福)PLC 顺控程序转换条件解读
  • C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
  • 【Linux】Linux基础指令3
  • 三模冗余设计
  • 软件测试python学习
  • DDD架构实战 充血模型 电商订单
  • 筛选企业订单和业绩显著增长的标的
  • 低内聚高耦合的衡量指标
  • AI书签管理工具开发全记录(十三):TUI基本框架搭建
  • Python训练day40
  • robot_lab——rsl_rl的train.py整体逻辑
  • 西北某省级联通公司:3D动环模块如何实现机房“一屏统管”?
  • 智谱清言沉思智能体,天工智能体,agenticSeek等AI Agent测试记录
  • 5.1 HarmonyOS NEXT系统级性能调优:内核调度、I/O优化与多线程管理实战
  • 独家首发!低照度环境下YOLOv8的增强方案——从理论到TensorRT部署
  • caliper config.yaml 文件配置,解释了每个配置项的作用和注意事项
  • 基于 openEuler 22.03 LTS SP1 构建 DPDK 22.11.8 开发环境指南
  • 嵌入(Embedding)技术的实现原理与应用场景解析
  • 阿里开源千问3向量模型 超越Google与OpenAI
  • 六、【ESP32开发全栈指南:深入解析ESP32 IDF中的WiFi AP模式开发】