int/uint:
变长的有符号或无符号整型。变量支持的步长以8
递增,支持从uint8
到uint256
,以及int8
到int256
。需要注意的是,uint
和int
默认代表的是uint256
和int256
。
什么是有符号整型,什么是无符号整型
无符号整型(uint)是计算机编程中的一种数值资料型别。有符号整型(int)可以表示任何规定范围内的整数,无符号整型只能表示非负数(0及正数)。
有符号整型能够表示负数的代价是其能够存储正数的范围的缩小,因为其约一半的数值范围要用来表示负数。如:uint8
的存储范围为0 ~ 255
,而int8
的范围为-127 ~ 127
如果用二进制表示:
- uint8: 0b
00000000
~ 0b11111111
,每一位都存储值,范围为0 ~ 255 - int8:0b
11111111
~ ob01111111
,最左一位表示符号,1
表示负
,0
表示正
,范围为-127 ~ 127
支持的运算符
-
比较:
<=
,<
,==
,!=
,>=
,>
,返回值为bool
类型。 -
位运算符:
&
,|
,(^
异或),(~
非)。 -
数学运算:
+
,-
,一元运算+
,*
,/
,(%
求余),(**
次方),(<<
左移),(>>
右移)。
Solidity目前沒有支持double/float
,如果是 7/2
会得到3
,即无条件舍去。但如果运算符是字面量,则不会截断(后面会进一步提到)。另外除0会抛异常 ,我们来看看下面的这个例子:
一、加 +,减 -,乘 *,除 /
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0 <0.7.0;
contract Math {
function mul(int a, int b) pure public returns (int) {
int c = a * b;
return c;
}
function div(int a, int b) pure public returns (int) {
int c = a / b;
return c;
}
function sub(int a, int b) pure public returns (int) {
return a - b;
}
function add(int a, int b) pure public returns (int) {
int c = a + b;
return c;
}
}
如果用5除以0就会抛出异常。
call to Math.div errored: VM error: invalid opcode.
invalid opcode
The execution might have thrown.
Debug the transaction to get more information.
二、求余 %
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0 <0.7.0;
contract Math {
function m(int a, int b) pure public returns (int) {
int c = a % b; // 10 % 3 -> 1
return c;
}
}
三、次方
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0 <0.7.0;
contract Math {
function m(uint a, uint b) pure public returns (uint) {
uint c = a**b; // 2 ** 8 -> 256
return c;
}
}
四、与 &,| 或,非 ~,^ 异或
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0 <0.7.0;
contract Math {
function yu() pure public returns (uint) {
uint a = 3; // 0b0011
uint b = 4; // 0b0100
uint c = a & b; // 0b0000
return c; // 0
}
function huo() pure public returns (uint) {
uint a = 3; // 0b0011
uint b = 4; // 0b0100
uint c = a | b; // 0b0111
return c; // 7
}
function fei() pure public returns (uint8) {
uint8 a = 3; // 0b00000011
uint8 c = ~a; // 0b11111100
return c; // 252
}
function yihuo() pure public returns (uint) {
uint a = 3; // 0b0011
uint b = 4; // 0b0100
uint c = a ^ b; // 0b0111
return c; // 7
}
}
五、位移
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0 <0.7.0;
contract Math {
function leftShift() pure public returns (uint8) {
uint8 a = 8; // 0b00001000
uint8 c = a << 2; // 0b00100000
return c; // 32
}
function rightShift() pure public returns (uint8) {
uint8 a = 8; // 0b00001000
uint8 c = a >> 2; // 0b00000010
return c; // 2
}
}
a << n
表示a的二进制位向左移动n
位,在保证位数没有溢出的情况下等价于a乘以2的n次方
。a >> n
表示a的二进制位向右移动n
位,在保证位数没有溢出的情况下等价于a除以2的n次方
。
整数字面量
整数字面量,由包含0-9
的数字序列组成,默认被解释成十进制。在Solidity中不支持八进制,前导0会被默认忽略,如0100,会被认为是100,【PS:十六进制可以这么写,0x11】。
小数由.
组成,在他的左边或右边至少要包含一个数字。如1.
,.1
,1.3
均是有效的小数。
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0 <0.7.0;
contract IntegerLiteral{
function integerTest1() pure public returns (uint) {
uint8 i = (2**800 + 1) - 2**800; //1
return i;
}
function integerTest2() pure public returns (uint) {
uint8 j = 2/4.0*10; //5
return j;
}
function integerTest3() pure public returns (uint) {
uint8 k = 0.5*8; //4
return k;
}
function integerTest4() pure public returns (uint) {
uint16 c = 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222 - 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;
return c; // 1111
}
}
小结
本篇教程中主要介绍了整型中什么是有符号整型,什么是无符号整型,以及它们所支持的一系列运算符。整型字面量中,在没有转换为具体类型时,可以做到高度精准度。
最新评论
大佬,这些课程在哪学习?有课程来源吗?
黎老师 您好 我是一名asp.net的后端工程师,想转职为智能合约开发工程师,但对于区块链我是完全的小白。 目前正在考虑您腾讯课堂的"从零构建以太坊智能合约到项目实战课程"。 请问这课程是否适合我这样的小白? 学完这教程是否足够我应付智能合约开发实务工作?如果不够,有什么补足的建议? 另外课程购买页面有同学评论这课程的技术和网站过时,不知道是否还适合目前(2022年)的开发场景呢?如果仅需更新部分技术点,学完您的课程后我该如何加强? 期待您的回覆,感谢您
那就还是像电影里那样?举个例子:开会的时候不必到现场,啪的一下几个全息人像出现在眼前?
不管元宇宙是什么、怎么定义,都需要一个降温来冷静清醒一下,然后再继续发展吧。VR都喊了多少年了,每年都说一句话“今年是VR元年”,都已经麻木了,元宇宙真的想好好发展下去,感觉也需要先冷静一下,不然还是炒热度的居多
元宇宙不是游戏和VR!目前市场上的元宇宙大家还在谈论更好体验的游戏、娱乐和VR,甚至很多忽悠和骗子,没有达到现实虚拟化和虚拟现实化,更无法实现能量和价值的虚实转换、没有虚拟与现实的多发并行和交互融合! 元宇宙Metaverse是:人类的数字世界DigiVerse(现实虚拟化)和数字的人类生活RealVirtual(虚拟现实化),并与现实世界Universe多发并行和交互作用,达到虚实(Metaverse+Universe)交融。其3D空间无限,第4维的时间的穿越伸缩,在更高维度上,成就二者的融合共生和价值交融(HumanVerse) Metaverse + Universe = Humanverse!
元宇宙不是游戏和VR!目前市场上的元宇宙大家还在谈论更好体验的游戏、娱乐和VR,甚至很多忽悠和骗子,没有达到现实虚拟化和虚拟现实化,更无法实现能量和价值的虚实转换、没有虚拟与现实的多发并行和交互融合! 元宇宙Metaverse是:人类的数字世界DigiVerse(现实虚拟化)和数字的人类生活RealVirtual(虚拟现实化),并与现实世界Universe多发并行和交互作用,达到虚实(Metaverse+Universe)交融。其3D空间无限,第4维的时间的穿越伸缩,在更高维度上,成就二者的融合共生和价值交融(HumanVerse) Metaverse + Universe = Humanverse!
元宇宙不是游戏和VR!目前市场上的元宇宙大家还在谈论更好体验的游戏、娱乐和VR,甚至很多忽悠和骗子,没有达到现实虚拟化和虚拟现实化,更无法实现能量和价值的虚实转换、没有虚拟与现实的多发并行和交互融合! 元宇宙Metaverse是:人类的数字世界DigiVerse(现实虚拟化)和数字的人类生活RealVirtual(虚拟现实化),并与现实世界Universe多发并行和交互作用,达到虚实(Metaverse+Universe)交融。其3D空间无限,第4维的时间的穿越伸缩,在更高维度上,成就二者的融合共生和价值交融(HumanVerse) Metaverse + Universe = Humanverse!