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

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


智能合约语言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); }}

智能合约语言Solidity 类型介绍相关推荐

  1. 智能合约语言 Solidity 教程系列9 - 错误处理

    这是Solidity教程系列文章第9篇介绍Solidity 错误处理. Solidity系列完整的文章列表请查看分类-Solidity. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文 ...

  2. 智能合约语言 Solidity 教程系列8 - Solidity API

    这是Solidity教程系列文章第8篇介绍Solidity API,它们主要表现为内置的特殊的变量及函数,存在于全局命名空间里. <!-- more --> 写在前面 Solidity 是 ...

  3. 区块链技术进阶-深入详解以太坊智能合约语言 solidity(含源码)-熊丽兵-专题视频课程...

    区块链技术进阶-深入详解以太坊智能合约语言 solidity(含源码)-103人已学习 课程介绍         区块链开发技术进阶-深入详解以太坊智能合约语言 solidity视频培训教程:本课程是 ...

  4. 智能合约语言Solidity Solidity API

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 智能合约语言Solidity Solidity API Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对 ...

  5. 智能合约语言 Solidity 教程系列9 - 错误处理 1

    什么是错误处理 错误处理是指在程序发生错误时的处理方式,Solidity处理错误和我们常见的语言不一样,Solidity是通过回退状态的方式来处理错误.发生异常时会撤消当前调用(及其所有子调用)所改变 ...

  6. 以太坊智能合约语言Solidity - 1 走进Solidity

    1. 走进Solidity 1.1 Remix IDE 界面初识 在本地编写我们可能会遇到各种各样的问题,所以使用在线的Remix编译器来编写合约:https://remix.ethereum.org ...

  7. 智能合约开发solidity编程语言实例

    智能合约开发用solidity编程语言部署在以太坊这个区块链平台,本文提供一个官方实战示例快速入门,用例子深入浅出智能合约开发,体会以太坊构建去中心化可信交易技术魅力.智能合约其实是"执行合 ...

  8. 以太坊智能合约基础——Solidity语言的计量单位和全局变量

    本文重点介绍 Solidity 语言的计量单位和全局变量,包括以太币单位.时间单位.特殊变量和函数三个类别.本文内容来源于 Solidity 0.8.12 版本. 以太币单位 以太币 Ether 单位 ...

  9. 【区块链Solidity】智能合约与Solidity介绍

    目录 智能合约 Solidity语言简介 Solidity语言特性 智能合约 智能合约的英文是Smart Contract 最早是尼克丶萨博在1995年就提出了智能合约的概念~就是将法律条文写成可执行 ...

最新文章

  1. Matlab频域高/低通滤波
  2. sar分辨率公式_初识合成孔径雷达SAR
  3. Redis 启动与授权
  4. 多线程-Thread-Runnable
  5. 对爬虫爬取到的数据进行存储
  6. 整整4个月了,尽全力组织了源码共读活动~
  7. ExtJS Grid 与 Asp.NET 通信
  8. 如何将一个完整项目推到码云_怎么将本地项目放到码云(gitee)上面?图文详解
  9. java知识点博客园_JAVA基础知识回顾
  10. linux xargs命令_如何在Linux中使用xargs命令?
  11. excel日期相关计算天数
  12. Android 滑动界面实现---Scroller类别 从源代码和开发文档了解(让你的移动布局)...
  13. Windows上如何搭建web网站,并发布到外网可访问?2-2
  14. 查看Mac上已连接WiFi的密码?
  15. jiathis jia.js Eval 解密 解密出来的代码
  16. 我的创业项目steam游戏王子斗恶龙(含技术透露)
  17. 视唱练耳训练小程序开发,摆脱传统训练制约性
  18. 支持百亿数据场景,海量高性能列式数据库HiStore技术架构解析
  19. Games101-课程20笔记
  20. java实现把数据写进Excel表格

热门文章

  1. date类型_06076.1.0如何将ORC格式且使用了DATE类型的Hive表转为Parquet表
  2. matlab中的expotest,提高Fortran矩阵指数性能(Expokit比Matlab、Python慢)
  3. vue更新data无效,页面data没刷新 vue.set
  4. 【转】iOS开发学习计划
  5. 反向春运成为新趋势 客流年增9%
  6. 举个栗子看如何做MySQL 内核深度优化
  7. 前端资源整理 - 订阅、工具等
  8. ORACLE初次安装自动安装软件包
  9. 为什么Scrum模式适合软件开发?
  10. JScript Array对象的几个原型方法