导读
区块链这么火,不学一下怎么行?
今天这篇文章将带领大家了解区块链的两种基本值类型——布尔类型和整数类型!讲解类型涉及到的运算以及一些注意问题。让我们一起走进本文看一下吧!
如果你有什么问题,或者有什么想法,欢迎评论与我一起沟通交流。如果你想了解更多有关于区块链相关技术的内容,那就加群:955538712 或者扫描下方二维码加入我们吧!
1 类型
我们在后续的代码中会用到各种类型的数据,所以在这里我们先来了解一下相关的类型,方便我们后续学习。
1 类型
Solidity 是一种静态类型语言,这意味着每个变量(状态变量和局部变量)都需要在编译时指定变量的类型。
Solidity 提供了几种基本类型,我们可以应用这些基本类型来组合复杂类型。
需要注意的是,“undefined”或“null”值的概念在Solidity中不存在,但是新声明的变量总是有一个 默认值 ,具体的默认值跟类型相关。在后面我们遇到了会具体说明。
2 类型分类
Solidity中的类型主要包括:
值类型
引用类型
映射
在后面的文章中,我们会详细介绍每种类型。
2 值类型
今天这篇文章我们主要介绍几种常见的值类型,首先先让我们来了解一下值类型吧!
1 值类型
Solidity中一些变量按照值来进行传递,这些变量的类型就是值类型。
这些变量被用作函数参数或者赋值语句中,都会进行值拷贝操作。
2 值类型分类
Solidity中的值类型有很多,包括:
布尔类型(布尔型):bool
整数类型(整型):int/uint
定长浮点型:fixed/ufixed
地址类型:address/ddress payable
合约类型
定长字节数组
变长字节数组
地址字面变量
有理数和整数字面常量
字符串字面常量及类型
Unicode字面常量
十六进制字面常量
枚举类型
函数类型
我们在后面,会针对这几个类型,慢慢讲解。
3 bool类型
bool类型我们很常见了,在这里,我们简单说一下。
1 bool类型
bool类型可能的取值为字面常量值 true 和 false 。
bool类型是最简单的数据类型,常用于解决结果为二分类的问题。例如:地址是否合法?交易是否成功?整数是否为素数?
2 bool类型运算符
bool类型主要的运算符就是逻辑运算符和关系运算符。
支持的逻辑运算符包括:
! :逻辑非
&& :逻辑与, “and”
|| :逻辑或, “or”
支持的关系运算符包括:
== :等于
!= :不等于
3 短路规则
有学过C++的同学,在学习逻辑运算符和表达式,听说过短路(short-circuiting)的问题。
没听过也不要紧,可以看下面的文章了解一下:
和C++中的意义,Solidity中的运算符 || 和 && 都遵循同样的短路规则:
f||g,若f为true,则结果一定为true,那么g就不会被执行。
f&&g,若f为false,则结果一定为false,那么g就不会被执行。
有多个语句也是一样:
逻辑或中,前面有true,则true后面的不执行;
逻辑与中,前面有false,则false后面的不执行;
4 整数类型
整数类型基本上是我们学习一门新的编程语言最先接触到,也是最常使用的数据类型。Solidity中的类型和普通编程语言的还有一些区别,具体的,我们一起往下看。
1 整数类型与命名规则
整数类型主要有两种:
int :有符号整数类型,
uint :无符号整数类型。
Solidity中支持uint8到uint256的类型和int8到int256的类型,后面的数字表示的是整数的位数,必须是8的倍数,例如:
uint16,uint128,int32,int64
不同的类型的数据的取值范围不同,例如uint8的取值范围为 0到
2 关系运算与位运算
整型支持关系运算和位运算,我们分别讲解。
首先是关系运算:
关系运算也叫比较运算。返回布尔类型的值,用于比较两个整型数据的大小关系判断两个整数是否相等。整型支持所有的关系运算符:
== , != , <= , < , >= , >
整数类型支持位运算,在Solidity中,位运算符包括普通位运算符和移位运算符:
普通运算符:&(按位与),|(按位或),^(按位异或), ~ (按位取反)
位运算符:<<(左移位), >>(右移位)
位运算不是原数值直接运算,而是转化为二进制数据,在数字的二进制补码表示上执行。
3 算术运算与取类型最值
算术运算符
算术运算有很多,也非常重要,算术运算符有如下几个:
-(负号)
+(加),-(减),*(乘),/(除),%(取余/取模),**(幂运算)
我们举几个简单的例子:
uint x = 5 + 2; // equal to 5+2 = 7
uint x = 5 - 2; // equal to 5-2 = 3
uint x = 5 * 2; // equal to 5*2 = 10
uint x = 8 / 2; // equal to 8/2 = 4
uint x = 13 % 5; // equal to 13%5 = 3
uint x = 5 ** 2; // equal to 5^2 = 25
虽然这些很简单,但是还是要注意一些问题:
问题1:普通除法必须要整除,否则使用显式转换。
在Solidity中使用如下代码会报错:
uint x = 8 / 3;
报错原因是:类型 8 / 3 不能隐式转换为预期类型 uint256。如果实在想用可以使用显式转换:
uint x = uint(8) / uint(3); //x的值为2
对于这里整型和整型的运算得到的结果是整型,后面我们讲到字面常量,字面常量的出发会保留小数位。
问题2:关于数据的溢出问题。
0.8.0 开始,算术运算有两个计算模式:一个是 “wrapping”(截断)模式或称 “unchecked”(不检查)模式,一个是”checked” (检查)模式。 默认情况下,算术运算在 “checked” 模式下,即都会进行溢出检查,如果结果落在取值范围之外,调用会通过失败异常<assert-and-require>回退。可以通过 unchecked { … }切换到 “unchecked”模式。一般来说,我们都要注意这个问题,保证数据不溢出。
问题3:关于0。
关于0,要注意如下几个点:
0不能做除数;
不能对0取模;
0**0(0的0次方)在Solidity中的定义为1。
问题4:关于次方的连用。
对于下面的表达式。在不同的版本,表达的含义不同:
x**y**z
为了防止自己搞混,我建议,如果你想表达 ,那就用:(x**y)**z,如果你想表达 ,那就用x**(y**z)。
取类型最值
Solidity还支持获取类型的最值:
type(X).min 获取这个类型的最小值;
type(X).max 获取这个类型的最大值。
说在后面的话
这篇文章到这里就要结束啦,希望大家能够通过这篇文章,能够了解并掌握bool类型和整数类型,掌握这两种类型的相关运算,特别是要注意需要注意的一些事项,能够将两种类型熟练应用于后面的实战中!
让我们在后续的课程中,再接再厉,学习更多知识吧。
AI与区块链技术
长按二维码关注
标签:03,运算,Solidity,整数,运算符,uint,整型,类型 From: https://blog.51cto.com/u_12001271/5851849