美文网首页区块链
玩转solidity --03数据类型(值类型)

玩转solidity --03数据类型(值类型)

作者: DavieKong | 来源:发表于2018-04-11 11:23 被阅读8次

solidity是一个静态类型的语言。也就是说每一个变量在申明的时候需要指定它的数据类型。
Solidity提供几个基本类型组合成复杂类型。

值类型

布尔类型

布尔:可能的常量值 是 真或假

操作符:

  • !(逻辑非)

  • &&(逻辑与,“and")

  • || (逻辑或,”or“)

  • ==(相等)

  • !=(不等)

  • 操作符||和&&可以应用常规短路规则,即 表达式 f(x) || g(y), 如果f(x) 已是真,g(y)将不用计算,即使它有副作用 (真||任意值 均为真,假&&任意布尔值 均为假)。

整型

int 和 uint分别是有符号和无符号的整数,关键字uint8 到 uint256 步长8 (从8到256位的无符号整数 )

uint 和 int 分别是 uint256 和 int256的别名
有符号整数和无符号整数
https://baike.baidu.com/item/%E6%97%A0%E7%AC%A6%E5%8F%B7%E6%95%B4%E5%9E%8B/6717424?fr=aladdin
https://wenku.baidu.com/view/4ec21b2969dc5022aaea00d4.html

操作符:

  • 比较 : <=,<,==,!=,>=,> (计算布尔量)

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

  • 算术操作符:+,-,一元-,一元+,,/,%(取余数),*(幂次方)

地址

以太坊中的地址的长度为20字节,一字节等于8位,一共160位,所以address其实亦可以用uint160来声明

操作符:

  • <=, <, ==, !=, >= 和 >

地址成员:

  • 账户余额(balance)和发送(send)

若查询到有资产余额的地址,然后发送 Ether(以wei为单位) 到send 函数的地址上

address x = 0x123;

address myAddress = this;

if (x.balance < 10 && myAddress.balance >= 10) x.send(10);

整型

整型常量是特定精度整数,它们也可以和非常量同时使用。例如, var x = 1 - 2; 1 - 2的值是-1,然后赋值给x, 这时x接收类型为int8——最小的类型,其中包含-1, 虽然1和2的类型实际上是uint8。

有时最大超过256位的整型常量也可用于计算:var x =(0 xffffffffffffffffffff 0 xffffffffffffffffffff) 0;这里,x的值是0,它的类型是uint8类型。

字符串

字符串可以通过""或者''来表示字符串的值,Solidity中的string字符串不像C语言一样以\0结束,比如"hello"这个字符串的长度就为我们所看见的字母的个数,它的长度为5

pragma solidity ^0.4.4;

contract StringLiterals{ 
    
    string  _name; // 状态变量
    
    //构造函数
    function StringLiterals() {
        _name = "hello";
    }
    
    // set方法
    function setString(string name) {
        
        _name = name;
    }
    
    // get方法
    function name() constant returns (string) {
        
        return _name;
    }
    
}

注意:string字符串不能通过length方法获取其长度。

枚举

ActionChoices其实就是一个自定义的整型,当枚举数不够多时,它默认的类型为uint8,当枚举数足够多时,它会自动变成uint16,下面的GoLeft == 0,GoRight == 1, GoStraight == 2, SitStill == 3。在setGoStraight方法中,我们传入的参数的值可以是0 - 3当传入的值超出这个范围时,就会中断报错。

pragma solidity ^0.4.16;

contract test {
    enum ActionChoices { GoLeft, GoRight, GoStraight, SitStill }
    ActionChoices choice;
    ActionChoices constant defaultChoice = ActionChoices.GoStraight;

    function setGoStraight() public {
        choice = ActionChoices.GoStraight;
    }

    function getChoice() public view returns (ActionChoices) {
        return choice;
    }

    function getDefaultChoice() public pure returns (uint) {
        return uint(defaultChoice);
    }
}

相关文章

  • 玩转solidity --03数据类型(值类型)

    solidity是一个静态类型的语言。也就是说每一个变量在申明的时候需要指定它的数据类型。Solidity提供几个...

  • 【智能合约】solidity知识点

    solidity数据类型 Solidity 数据类型http://solidity.readthedocs.io/...

  • 玩转solidity --04数据类型(引用类型)

    引用类型 数组 数组是可以在编译时固定大小的,也可以是动态的。 固定长度类型数组的声明 通过length方法获取数...

  • JS数据类型

    数据类型分类和区别 分类 javascript数据类型分为:值类型(基本数据类型)、引用数据类型; 区别 值类型 ...

  • Solidity编写智能合约笔记-值类型

    Solidity是静态类型语言,编译时需明确变量的类型,类型分类有值类型与引用类型 值类型(Value Type)...

  • JavaScript数据类型

    JavaScript数据类型分为值类型和引用数据类型,值类型:字符串(String),数字(Number),布尔(...

  • 简单数据类型和复杂数据类型

    简单数据类型和复杂数据类型 1.1 简单数据类型 ​ 简单类型(基本数据类型、值类型):在存储时变量中存储的是值本...

  • Java基本数据类型

    Java 的两大数据类型: 内置数据类型 引用数据类型 内置数据类型 Float和Double的最小值和最大值都是...

  • Java类型转换

    一、值类型与引用类型 值类型: 在Java中,值类型表示的是这种数据类型的值代表数据本身。八种基本数据类型就是值类...

  • 浅拷贝与深拷贝(JavaScript)

    一、预备知识 ECMAScript变量包含两种不同数据类型的值:基本数据类型和引用数据类型。基本数据类型:名值存储...

网友评论

    本文标题:玩转solidity --03数据类型(值类型)

    本文链接:https://www.haomeiwen.com/subject/imrahftx.html