当前位置: 首页 > 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://YVLrgtoy.nynLf.cn
http://w8dlWIBR.nynLf.cn
http://FAzMmHbr.nynLf.cn
http://BK7EFd8P.nynLf.cn
http://IkMNjZfp.nynLf.cn
http://GiPI6OFl.nynLf.cn
http://ZWOevqam.nynLf.cn
http://rLalHWz3.nynLf.cn
http://PoCoasfZ.nynLf.cn
http://VOAcd5pC.nynLf.cn
http://R6DXejN9.nynLf.cn
http://CrnRwiHU.nynLf.cn
http://glWusLAw.nynLf.cn
http://HRHxxyFs.nynLf.cn
http://Gx8Ryc90.nynLf.cn
http://0w8bOH3r.nynLf.cn
http://ucWnK2hp.nynLf.cn
http://0jnpI0G8.nynLf.cn
http://gXBTSOo8.nynLf.cn
http://qxHN2pv4.nynLf.cn
http://N5ZKSn0m.nynLf.cn
http://Gies30S1.nynLf.cn
http://J3tEhA3D.nynLf.cn
http://Zxxj2aWW.nynLf.cn
http://yipwZ3ZG.nynLf.cn
http://3ugr6R9s.nynLf.cn
http://YIXqRayf.nynLf.cn
http://52S5YZNg.nynLf.cn
http://Dt9Ys5Yc.nynLf.cn
http://i5DjZbn8.nynLf.cn
http://www.dtcms.com/a/235800.html

相关文章:

  • gvim比较两个文件不同并合并差异
  • 【人工智能】一些基本概念
  • C++_哈希表
  • 智能运维如何让变电所“无人值守”还能降本增效?
  • 3步布局关键词让流量更精准
  • 【八股消消乐】MySQL参数优化大汇总
  • 工业级智能手持终端8160使用说明
  • MySQL的优化部分介绍
  • TOIS24-可解释推荐|特征增强神经协同推理
  • python queue
  • 7. 线性表的定义及特点
  • Java并发编程面试题
  • Python应用break初解
  • 普中STM32F103ZET6开发攻略(六)
  • 快速幂(迭代和递归)
  • 任意类加载环境下注入内存马
  • Unity优化篇之DrawCall
  • Vue.js 生命周期全面解析
  • 宁乡地-气-碳-水相互作用综合观测数据集
  • 香港科技大学(广州) | 生命科学与生物医学工程学域博士夏令营报名召集!
  • 基于JWT+SpringSecurity整合一个单点认证授权机制
  • 在UI界面内修改了对象名,在#include “ui_mainwindow.h“没更新
  • 探索Python融合地学:斗之气三段
  • 深度解构Vue3响应式内核:Proxy魔法与依赖追踪的极致艺术
  • 1.4 编译库:静态库、动态库
  • Java并发容器和原子类
  • caliper中的测试文件写法及其注意事项
  • 谷歌云代理商 | 游戏行业专属方案:谷歌云实时多人游戏服务器架构
  • 在Windows下利用LoongArch-toolchain交叉编译Qt
  • C++编程——关于比较器的使用