当前位置: 首页 > 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操作,否则使用>>

相关文章:

  • gvim比较两个文件不同并合并差异
  • 【人工智能】一些基本概念
  • C++_哈希表
  • 智能运维如何让变电所“无人值守”还能降本增效?
  • 3步布局关键词让流量更精准
  • 【八股消消乐】MySQL参数优化大汇总
  • 工业级智能手持终端8160使用说明
  • MySQL的优化部分介绍
  • TOIS24-可解释推荐|特征增强神经协同推理
  • python queue
  • 7. 线性表的定义及特点
  • Java并发编程面试题
  • Python应用break初解
  • 普中STM32F103ZET6开发攻略(六)
  • 快速幂(迭代和递归)
  • 任意类加载环境下注入内存马
  • Unity优化篇之DrawCall
  • Vue.js 生命周期全面解析
  • 宁乡地-气-碳-水相互作用综合观测数据集
  • 香港科技大学(广州) | 生命科学与生物医学工程学域博士夏令营报名召集!
  • wap网站开发教程/培训公司排名
  • 网站推广方法的费用/点点站长工具
  • 做外卖那些网站好/广州网站优化方式
  • 重庆做网站建设公司排名/深圳刚刚突然宣布
  • 京东怎么做轮播图链接网站/排超最新积分榜
  • 手机百度怎么解除禁止访问网站/东莞服务好的营销型网站建设