当前位置: 首页 > 编程日记 > 正文

智能合约语言Solidity 类型介绍

链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。

在这里插入图片描述
智能合约语言Solidity 类型介绍11

Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解,毕竟如果你不是很了解的话,未必知道本篇是讲的什么,So,萌新就不要来看了,很高深哦~哈哈,开个小玩笑。

类型

Solidity是一种静态类型的语言,也就是说需要在编译时指定变量的类型,是一种面向对象的语言。但作为一种真正意义上运行在网络上的去中心合约。其可以提供基础的来组合成复杂的类型。

Solidity类型分为两类:

1.值类型:变量在赋值或传参时,总是进行值拷贝。

2.引用类型

值类型(Value Type)

值类型包含:

布尔类型(Booleans)

整型(Integers)

定长浮点型(Fixed Point Numbers)

定长字节数组(Fixed-size byte arrays)

有理数和整型常量(Rational and Integer Literals)

字符串常量(String literals)

十六进制常量(Hexadecimal literals)

枚举(Enums)

函数类型(Function Types)

地址类型(Address)

地址常量(Address Literals)

1

布尔类型(Booleans)

布尔(bool):可能的取值为常量值true和false。

布尔类型支持的运算符有:

!逻辑非

&& 逻辑与

|| 逻辑或

== 等于

!= 不等于

注意:运算符&&和||是短路运算符,如f(x)||g(y),当f(x)为真时,则不会继续执行g(y)。

整型(Integers)

int/uint: 表示有符号和无符号不同位数整数。支持关键字uint8 到 uint256 (以8步进),uint 和 int 默认对应的是 uint256 和 int256。

支持的运算符:

比较运算符:<=, < , ==, !=, >=, > (返回布尔值:true 或 false)

位操作符:&,|,^(异或),~(位取反)

算术操作符:+,-,一元运算-,一元运算+,,/, %(取余数), **(幂), << (左移位), >>(右移位)

说明:

整数除法总是截断的,但如果运算符是字面量(字面量稍后讲),则不会截断。

整数除0会抛异常。

移位运算的结果的正负取决于操作符左边的数。x << y 和 x 2y 是相等, x >> y 和 x / 2y 是相等的。

不能进行负移位,即操作符右边的数不可以为负数,否则会抛出运行时异常。

注意:Solidity中,右移位是和除等价的,因此右移位一个负数,向下取整时会为0,而不像其他语言里为无限负小数。

有理数和整型常量(Rational and Integer Literals)

也有人把Literals翻译为字面量

整型常量是有一系列0-9的数字组成,10进制表示,比如:8进制是不存在的,前置0在Solidity中是无效的。

10进制小数常量(Decimal fraction literals)带了一个., 在.的两边至少有一个数字,有效的表示如:1., .1 和 1.3.

科学符号也支持,基数可以是小数,指数必须是整数,有效的表示如: 2e10, -2e10, 2e-10, 2.5e1。

数字常量表达式本身支持任意精度,也就是可以不会运算溢出,或除法截断。但当它被转换成对应的非常量类型,或者将他们与非常量进行运算,则不能保证精度了。如:(2800 + 1) - 2800的结果为1(uint8整类) ,尽管中间结果已经超过计算机字长。另外:.5 * 8的结果是4,尽管有非整形参与了运算。

只要操作数是整形,整型支持的运算符都适用于整型常量表达式。如果两个操作数是小数,则不允许进行位运算,指数也不能是小数。

注意:数字常量表达式,一旦其中含有常量表达式,它就会被转为一个非常量类型。下面代码中表达式的结果将会被认为是一个有理数:

uint128 a = 1;uint128 b = 2.5 + a + 0.5;

上述代码编译不能通过,因为b会被编译器认为是小数型。

字符串常量

字符串常量是指由单引号,或双引号引起来的字符串(“foo” or ‘bar’)。字符串并不像C语言,包含结束符,”foo”这个字符串大小仅为三个字节。和整数常量一样,字符串的长度类型可以是变长的。字符串可以隐式的转换为byte1,…byte32 如果适合,也会转为bytes或string。

字符串常量支持转义字符,比如\n,\xNN,\uNNNN。其中\xNN表示16进制值,最终转换合适的字节。而\uNNNN表示Unicode编码值,最终会转换为UTF8的序列。

十六进制常量(Hexadecimal literals)

十六进制常量,以关键字hex打头,后面紧跟用单或双引号包裹的字符串,内容是十六进制字符串,如hex”001122ff”。它的值会用二进制来表示。

十六进制常量和字符串常量类似,也可以转换为字节数组。

枚举(Enums)

在Solidity中,枚举可以用来自定义类型。它可以显示的转换与整数进行转换,但不能进行隐式转换。显示的转换会在运行时检查数值范围,如果不匹配,将会引起异常。枚举类型应至少有一名成员。下面是一个枚举的例子:

pragma solidity ^0.4.0;contract test { enum ActionChoices { GoLeft, GoRight, GoStraight, SitStill } ActionChoices choice; ActionChoices constant defaultChoice = ActionChoices.GoStraight; function setGoStraight() { choice = ActionChoices.GoStraight; } // Since enum types are not part of the ABI, the signature of “getChoice” // will automatically be changed to “getChoice() returns (uint8)” // for all matters external to Solidity. The integer type used is just // large enough to hold all enum values, i.e. if you have more values, // uint16 will be used and so on. function getChoice() returns (ActionChoices) { return choice; } function getDefaultChoice() returns (uint) { return uint(defaultChoice); }}

相关文章:

怎样快速学习React

react简单学习路线&#xff08;实用版&#xff09; 学习一门新的技术之前有必要了解一下该技术在专业领域的评价&#xff0c;使用的领域&#xff0c;以及整体的学习路线&#xff0c;总之尽可能多的在入坑之前了解相关方面的信息。不要什么都不去查就直接学了&#xff0c;这个是…

Poj_1274 The Perfect Stall -二分图裸题

题目&#xff1a;给牛找棚&#xff0c;每个棚只能容一只牛&#xff0c;牛在对应的棚才能产奶&#xff0c;问最多能让几只牛产奶。 /************************************************ Author :DarkTong Created Time :2016/7/31 10:51:05 File Name :Poj_1274.cpp…

青少年软件编程python考试-青岛全国青少年软件编程等级考试—Python

卓优特机器简介 卓优特机器人是集教育机器人设备研发、生产、销售及课程研发、教育机器人课程教育及竞赛技术服务、机器人实验室方案策划及配置、智能技术支持的高新技术集成服务商, 公司由多所知名大学的多位智能技术专家及教授提供技术指导。 卓优特机器人是集教育机器人设备…

区块链基础--工作量证明

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链基础&#xff08;6&#xff09;–工作量证明1 我认为技术和共识构建了区块链&#xff0c;那么就由几个问题需要去解决&#xff0c;第一&…

pat乙级1049

浮点型乘整型和整型乘浮点型结果不同&#xff0c;不知为什么。 1 double sum 0.0; 2 for (int i 0; i < n; i) 3 { 4 cin >> a[i]; 5 sum a[i] * (i 1) * (n - i); 6 } 7 printf("%.2f", sum); 提交结果正确。 1 double sum 0.0; 2 for (int i…

hdu-5778 abs(暴力枚举)

题目链接: abs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Problem DescriptionGiven a number x, ask positive integer y≥2, that satisfy the following conditions:1. The absolute value of y - x is minimal2. To prime f…

bugku 杂项 就五层你能解开吗_你能解开这个和数字有关的逻辑解谜游戏吗? | 每日一考...

今天是一道和数字有关的逻辑解谜游戏看看你能用多长时间得到答案这道题的目标是&#xff0c;把网格根据数字划分成很多个方形小块。每个数字都代表它所在的小块面积&#xff0c;也就是包含了几个小格子&#xff0c;要求如下图&#xff0c;每个小块里必须有&#xff0c;而且只能…

区块链技术术语表

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链技术包含了常见的区块链基本概念和进阶阅读的参考文章&#xff0c;用自己的思考方式去优化理解。 比特币&#xff1a;一种分布式网络的数字货…

『TensorFlow』数据读取类_data.Dataset

一、资料 参考原文&#xff1a; TensorFlow全新的数据读取方式&#xff1a;Dataset API入门教程 API接口简介&#xff1a; TensorFlow的数据集 二、背景 注意&#xff0c;在TensorFlow 1.3中&#xff0c;Dataset API是放在contrib包中的&#xff1a; tf.contrib.data 而在Tenso…

出入口控制系统工程设计规范_[问答]连载77-控制系统之间如何时钟同步?

仪表小猪在控制系统中&#xff0c;趋势、报警、事件记录等都与时间相关&#xff0c;因此整个系统始终保持一个统一的时钟很关键。如果操作站和控制站时间不同步&#xff0c;操作员站上面显示的事件、趋势等也不能真正的反应出现场实际变化的时间&#xff0c;不能作为真实的历史…

分布式账本(Distributed ledger)

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 是一种在网络成员之间共享、复制和同步的数据库。分布式账本记录网络参与者之间的交易&#xff0c;比如资产或数据的交换。这种共享账本消除了调解不…

手动删除木马程序

1 ??? 2 这个蠢货竟然用360? (360杀毒太流氓&#xff0c;插件不可控&#xff0c;就是第一个要杀的木马) 一些基本的命令往往可以在保护网络安全上起到很大的作用,下面几条命令的作用就非常突出。 一、检测网络连接 如果你怀疑自己的计算机上被别人安装了木马,或者是中…

phpstorm如何同时打开两个文件夹_2分钟学会文件夹共享,化身办公室电脑大神

点击上方蓝色字体&#xff0c;关注我们身在职场或学校的你&#xff0c;还在用微信或QQ给办公室的小伙伴传文件吗&#xff1f;那你可真就out了&#xff0c;总结一下&#xff0c;微信或QQ传文件存在以下3个缺点。1、传输文件大小存在限制微信不能发送100MB以上的文件&#xff0c;…

Hdu_2063 过山车 -最大匹配(邻接表版)

题目&#xff1a;就是最大匹配了 /************************************************ Author :DarkTong Created Time :2016/8/1 12:53:27 File Name :Hdu2063.cpp *************************************************/#include <cstdio> #include <cstr…

“去中心化”为何意义重大?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 互联网的前两个时代 在互联网的第一个时代–从20世纪80年代到21世纪初–互联网服务建立在由互联网社区控制的开放协议之上。这意味着&#xff0c;人…

一阶微分算子锐化图像_【动手学计算机视觉】第三讲:图像预处理之图像分割...

本讲完整代码>>前言图像分割是一种把图像分成若干个独立子区域的技术和过程。在图像的研究和应用中&#xff0c;很多时候我们关注的仅是图像中的目标或前景(其他部分称为背景)&#xff0c;它们对应图像中特定的、具有独特性质的区域。为了分割目标&#xff0c;需要将这些…

visual studio code 里调试运行 Python代码

最近对微软的visual studio code 挺感兴趣的&#xff0c;微软的跨平台开发工具。轻量简洁。 版本迭代的也挺快的&#xff0c;截止16年8月2日已经1.3.1版本了&#xff0c;功能也愈加完善。&#xff08;16年12月18日 已经&#xff0c;发到1.10.1版本了&#xff0c;更新非常频繁&a…

GridView单元格取值显示为nbsp;

在通过GridView取一个单元格&#xff08;cell&#xff09;的值时&#xff0c;数据库中为NULL&#xff0c;而页面上显示为空格。发现通过gridview.cell[i].text取出来的值为 &#xff0c;导致获取数据出现问题。 解决方法&#xff1a; 一、利用Server.HtmlDecode(string)进行转换…

什么是比特币?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 比特币就是所谓的“加密货币”&#xff0c;这是一种完全以数据形式存在的数字资产。你存在银行的钱可能也是一堆数字&#xff0c;但这些数字等效于…

C程序设计-----第1次作业

一、 PTA作业。 在完成PTA作业的时候我没有认真读题。每次都是提交完整代码 6-1&#xff08;1&#xff09; 1 #include <stdio.h>2 3 //P等价于&#xff08;p&#xff09;还是等价于*&#xff08;p&#xff09;&#xff1f;4 5 int main(){6 int *p, a 3;7 p…

python画散点图对散点阴影扩充_Python金融应用之图表制作(三)

​NO.602020.04.06工欲善其事&#xff0c;必先利其器//- 前言 - 今天&#xff0c;小咖带大家使用Python制作申万行业PE和ROE的散点图&#xff1f;最终将得到以下效果&#xff1a;

List集合的去除重复性练习

package com.java.b.listdmeo.www; import java.util.ArrayList;import java.util.Iterator; import com.java.Student.www.Student; public class listtest { public static void main(String[] args) { //创建一个集合&#xff0c;该集合为List 集合 ArrayList listnew Arr…

区块链的安全软肋是什么?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 今天我们来谈谈区块链的安全软肋。 作为比特币中的核心技术&#xff0c;在无法建立信任关系的互联网上&#xff0c;区块链技术依靠密码学和巧妙的分…

web service 项目 和 普通 web项目 的 区别

web service 面向的是开发者&#xff08;需要再次开发&#xff09; 普通web 面向的是用户&#xff08;直接使用&#xff09;转载于:https://www.cnblogs.com/zno2/p/5612024.html

selenium:学习资源

selenium中文版文档 http://www.selenium.org.cn/1203.html selenium 搜索功能&#xff1a; http://blog.csdn.net/qq_878799579/article/details/73321015 selenium 详细教程&#xff1a; http://www.cnblogs.com/yoyoketang/p/6123938.html 转载于:https://www.cnblogs.com/f…

node.js 验证路径有效性_怎样识别光伏谐波路径?试试这个算法

国网吉林省电力有限公司四平供电公司的研究人员韩绍禹、李新辉&#xff0c;在2019年第5期《电气技术》杂志上撰文指出(论文标题为“基于信息熵和节点导纳矩阵的光伏谐波路径初探”)&#xff0c;光伏电站的接入给电网注入一定谐波&#xff0c;同时也增加了电网谐波线损。本文针对…

区块链研发与运营

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 传统行业之所以会存在着每况愈下的情况发生&#xff0c;主要的原因还是在于运营方式的墨守成规&#xff0c;造成消费者缺乏了购买欲望和关注度&am…

mysql longtext可以存储多少文字_MySQL 四万字精华总结 + 面试100 问,和面试官扯皮绰绰有余(收藏系列)

作者&#xff1a;派大新 链接&#xff1a;https://juejin.im/post/5f0d4fadf265da22f3250eaa写在之前&#xff1a;不建议那种上来就是各种面试题罗列&#xff0c;然后背书式的去记忆&#xff0c;对技术的提升帮助很小&#xff0c;对正经面试也没什么帮助&#xff0c;有点东西的…

2018.3.15校内互测总结-点分治-线段树

这是曾来过咱们学校集训的一位大神出的~ T1 题目大意 给出一棵带边权的无根树&#xff0c;求树上前$k$大的路径的长度。 $1 \leq n \leq 200000$ 题解 想了一上午点分治&#xff0c;却发现只会$O(nlog^3n)$的...... 正解是二分第$k$大的权值&#xff0c;用点分治判断&#xff0…

EntityFramework Core 学习笔记 —— 创建模型

原文地址&#xff1a;https://docs.efproject.net/en/latest/modeling/index.html 前言&#xff1a; EntityFramework 使用一系列的约定来从我们的实体类细节创建模型。我们可以钦定一些额外的映射配置来添加、重写实体类的哪些细节应该被这些约定所发现。 这篇文章讲述了一些无…