在solidity语言中,变量和数据类型分为三类:基本类型(bool、int、address等),复合类型(array、struct、mapping等)和特殊类型(enum、function、modifier等)。下面我们来对”基本类型“部分进行详细学习。

基本类型

布尔类型(bool)

布尔类型(bool)占用1个字节的存储空间,即8个比特位,该类型只能取两个值:true和false。其中,0表示false,1表示true,但Solidity中的布尔类型与其他语言中的布尔类型略有不同,比如C语言中的布尔类型通常占用1个字节,但只有0表示false,而其他非零值都可以表示true。

    bool _Bool;     //未初始化的bool变量_Bool
   bool _True = true;      //初始化为true的bool变量_True
   bool _False = false;    //初始化为false的bool变量_False

Solidity中的布尔类型同样支持逻辑运算。

“与”运算(and)使用"&&"运算符,只有条件都为"true"的时候,结果才为"true",否则为"false"。

“或”运算(or)使用"||"运算符,至少有一个条件为"true"的时候,结果便为"true",否则为"false"。

”非“运算(not)使用"!"运算符,对bool值取反。

”等于“使用"==",”不等于“使用"!="。

    //定义三个bool变量
   bool _Bool1 = true;
   bool _Bool2 = true;
   bool _Bool3 = false;
   
   //进行逻辑运算
   bool _Bool4 = _Bool1 && _Bool2;     //"与"运算,条件都为"true",结果为"true"
   bool _Bool5 = _Bool1 && _Bool3;     //"与"运算,有一条件为"false",结果为"true"
   bool _Bool6 = _Bool1 && _Bool3;     //"或"运算,至少有一个条件为"true",结果为"true"
   bool _Bool7 = !_Bool1;      //"非"运算,取反
   bool _Bool8 = _Bool1 == _Bool2;     //"等于",满足为"true"
   bool _Bool9 = _Bool1 != _Bool3;     //"不等于",满足为"true"

整型(int/uint)

在Solidity中,整数类型分为有符号整数和无符号整数,并且可以声明数值位数。

有符号整数型(int)

有符号整数型(int)可以表示正数和负数,在不声明类型长度的情况下,"int"默认长度为256位,也可以指定位数,如:int8, int16, int 32, int256等。

无符号整数型(uint)

无符号整数型(uint)只能表示正数,在不声明类型长度的情况下,"uint"默认长度为256位,也可以指定位数,如:uint8, uint16, uint 32, uint256等。

需要注意的是,声明的位数范围是8位到256位,且必须是8的倍数,需要根据需求来设置范围用以节省存储空间。

    //定义整型变量
   int8 _Num1 = 10;    //8位有符号整型,取值为10
   int256 _Num2 = -10000;      //256位有符号整型,取值为-10000
   uint32 _Num3 = 100;     //32位无符号整型,取值为100
   uint128 _Num4 = 1000;      //128位无符号整型,取值为1000

关于整型的运算符有:

算数运算符:+,-,*,/,%(取余),**(幂)。

    //整型的运算
   int256 _Number1 = 10;
   int256 _Number2 = _Number1 + 100;   //整数的基本运算
   int256 _Number3 = _Number1 ** 2;    //幂运算
   int256 _Number4 = _Number1 % 3;     //取余

比较运算符(计算返回布尔值):<=,<,==,!=,>=,>。

    bool _NumBool = _Number1 < _Number2;    //比较运算返回bool值

地址类型(address)

地址类型(address)是Solidity中用来表示以太坊地址的数据类型。用于处理以太坊交易,与其他合约交互和验证身份等功能。

该类型用20字节大小的空间存储以太坊地址,地址可以是外部账户地址,也可以是智能合约地址。地址类型具有成员,如"balance"和"transfer",前者返回地址中以太坊余额,后者将以太坊从当前地址发送到指定地址。(我们将在后面对地址类型进行详细的学习,这里只做简单说明。)

    //地址类型
  address _Address = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4; //初始化一个地址
  uint256 _Balance = _Address.balance;   //地址类型的成员"balance",返回该地址的以太坊余额

字节类型(byte/bytes)

在Solidity中,字节类型分为定长(byte,bytes8等)和不定长(bytes),前者属于数值类型,后者属于引用类型。字节类型的使用与数组类似,也称为字节数组。

    //定长的字节数组
   bytes16 _Bytes16 = "n0hackers";   //定义一个字节数组用于存储字符串"n0hackers"
   bytes1 _Byte = bytes16[0];    //单独存储_Bytes16中的第一个字节的内容

Solidity-变量和数据类型[基本类型]的更多相关文章

  1. ECMAScript1.1 js书写位置 | 声明变量 | 基本数据类型 | 数据类型转换 | 操作符 | 布尔类型的隐式转换

    js书写位置 由于在写css样式时使用的时双引号,所以我们在写js代码时建议使用单引号(‘’)! 行内式 <input type="button" value="点 ...

  2. 使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果

    查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的变量.数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算 ...

  3. 以太坊智能合约 Solidity 的常用数据类型介绍

    目录 目录 1.数组 1.1.对数组的增删改查操作. 2.String.Bytes.Mapping的使用 3.Enums 和 Structs 的简单应用 4.Ether 单位和 Time 单位 5.A ...

  4. JavaScript基础(一)之语法、变量、数据类型

    1.JavaScript语法 ①区分大小写 ②弱类型变量 ③每行结尾分号可有可无 ④括号用于代码块 ⑤注释有两种方式(单行和多行注释) 2.JavaScrip变量 ①用Var声明,不要初始化 ②可以在 ...

  5. PHP变量和数据类型

    编程语言可以分为三大类 1. 静态类型语言,比如:C/Java等,在静态语言类型中,类型的检查是在编译期(compile-time)确定的. 2. 动态语言类型,比如:PHP,python等各种脚本语 ...

  6. JS魔法堂:函数重载 之 获取变量的数据类型

    Brief 有时我们需要根据入参的数据类型来决定调用哪个函数实现,就是说所谓的函数重载(function overloading).因为JS没有内置函数重载的特性,正好给机会我们思考和实现一套这样的机 ...

  7. JavaScript中的变量及数据类型

    转自:http://blog.csdn.net/mygis2005/article/details/7375419 JavaScript是一种弱类型的语言,变量名.操作符和方法名都区分大小写. 1.变 ...

  8. Python变量、数据类型6

    1.Python变量 变量,即代表某个value的名字. 变量的值存储在内存中,这意味着在创建变量时会在内存中开辟一个空间. !!!即值并没有保存在变量中,它们保存在计算机内存的深处,被变量引用.所以 ...

  9. Java 关键字、标识符、注释、常量与变量、数据类型,算术、赋值、比较、逻辑、位、三元运算符和流程控制、break、continue【3】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...

  10. JS代码放置位置、变量与数据类型、运算符与逻辑表达运算符

    内容简要: 1.JS代码放置位置的问题: 2.变量与数据类型: 3.运算符与逻辑表达式的运算符   我的位置 全局问题:为何在网页推荐位置(一般在<head></head>内部 ...

随机推荐

  1. spring cloud gateway网关(一)之网关路由

    1.gateway相关介绍 在微服务架构中,系统往往由多个微服务组成,而这些服务可能部署在不同机房.不同地区.不同域名下.这种情况下,客户端(例如浏览器.手机.软件工具等)想要直接请求这些服务,就需要 ...

  2. iOS气泡提示工具BubblePopup的使用

      在平时的开发中,通常新手引导页或功能提示页会出现气泡弹窗来做提示.如果遇到了这类功能通常需要花费一定的精力来写这么一个工具的,这里写了一个气泡弹窗工具,希望能帮你提升一些开发效率.   使用方法 ...

  3. 记一次 .NET 某药材管理系统 卡死分析

    一:背景 1. 讲故事 前段时间有位朋友找到我,说他们在查询报表的时候发现程序的稳定性会受到影响,但服务器的内存,CPU都是正常的,让我帮忙看下怎么回事,问了下程序的稳定性指的是什么?指的是卡死,那既 ...

  4. 自然语言处理 Paddle NLP - 快递单信息抽取 (ERNIE 1.0)

    文档检索:需要把业务问题拆解成子任务.文本分类 -> 文本匹配 -> 等任务 -> Panddle API 完成子任务 -> 子任务再拼起来 介绍 在2017年之前,工业界和学 ...

  5. ModelBox实战开发:RK3568实现摄像头虚拟背景

    摘要:本文将使用ModelBox端云协同AI开发套件(RK3568)实现摄像头虚拟背景AI应用的开发. 本文分享自华为云社区<ModelBox开发案例 - RK3568实现摄像头虚拟背景[玩转华 ...

  6. C++面试八股文:override和finial关键字有什么作用?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第22面: (二师兄好苦逼,节假日还在面试...) 面试官:C++的继承了解吗? 二师兄:(不好意思,你面到我的强项了..)了解一些. 面试官:什么是 ...

  7. 14. SpringMVC执行流程

    14.1.SpringMVC 常用组件 DispatcherServlet:前端控制器,不需要工程师开发,由框架提供 作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求 Ha ...

  8. 基于VAE的风险分析:基于历史数据的风险分析、基于实时数据的风险分析

    目录 引言 随着人工智能和机器学习的发展,风险分析已经成为许多行业和组织中不可或缺的一部分.传统的基于经验和规则的风险分析方法已经难以满足现代风险分析的需求,因此基于VAE的风险分析方法逐渐成为了主流 ...

  9. 解决Springboot项目打成jar包后获取resources目录下的文件失败的问题

    前几天在项目读取resources目录下的文件时碰到一个小坑,明明在本地是可以正常运行的,但是一发到测试环境就报错了,说找不到文件,报错信息是:class path resource [xxxx] c ...

  10. 配置http协议访问Harbor镜像仓库

    解决http: server gave HTTP response to HTTPS client问题,此问题在上传与下载时均可能出现. 由于docker镜像拉取与推送服务使用的是https协议,但是 ...