【区块链2.0 以太坊学习笔记1】第一个solidity程序与整型/bool型基本运算

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处! https://blog.csdn.net/wy_97/article/details/85321771

Hint:此系列学习笔记为准备毕设期间学习记录所书,有任何疑问,欢迎一起讨论

学习资料及工具推荐

  1. Solidity IDE Remix(在线浏览器编辑器)
    关于此在线ide的使用介绍,可以参考这里
  2. B站的视频 基于以太坊的智能合约开发教程【Solidity】
  3. B站的视频 从零构建以太坊(Ethereum)智能合约到项目实战

~其他更好的学习资料之后边学边贴

第一个helloworld程序

pragma solidity ^0.4.0;

/*
    The HelloWorld contract save name ,change name and test pure's function
*/

contract HelloWorld {
    string name = "Sp4rks";

/*
    定义了函数 GetString,用于取出 name的值。
    pubulic表示公开访问,
    view表示只进行访问不修改,节约 gas
    returns为语法规范
*/
    function GetString() public view returns(string){
        return name;
    }

// 定义了函数 ChangeName,用于修改 name的值。
    function ChangeName (string newname) public {
        name = newname;
    }

/*
    定义了函数 pureTest,用于测试 pure的用法。
    view修饰的函数 ,只能读取 storage变量的值,不能写入。
    pure修饰的函数 ,不能对 storage变量进行读写。
*/
    function pureTest(string newname) pure public returns(string) {
        return newname;
    }

}

在线工具remix编译一下
在这里插入图片描述
再部署到区块链上(模拟)
在这里插入图片描述
验证功能直接略了~

数据类型及运算

pragma solidity ^0.4.0;


contract DataOperation {
    bool p = true;

/*
    定义 outputA函数,输出 a,!a
    因为同时输出两个值,所以其相应的 returns和 return都有所变化
    ! 表示非,也就是与原本布尔值相反
*/
    function outputA () public view returns(bool,bool){
        return (p,!p);
    }
// &&,||,==,!=对布尔型的运算与其他语言一致

/*
int分为 int8、int16、int24 ......,8位一步,直到 int256
如果后面的数字省略,则默认为 int256
int8后面的 8是什么意思呢?
即用 8位二进制来存储(其中左边第 1位用来表示 + - 符号),代表可存储的数字范围,如:
11111111 ~ 01111111,左边第 1位用来表示符号,1表示负,0表示正,
换算成十进制则为  -(1+ 2 + 4 + 8 + 16 + 32+ 64) ~ (1+ 2 + 4 + 8 + 16 + 32+ 64)
即可存储 -127 ~ 127 之间 255 个数字。
也可以理解成存储范围为2的多少次方。

uint 表示无符号数,第一位不用来存储 +,-号
即可存储 0 ~ 255 之间 255 个数字
*/
    uint num1 = 1;

//定义 calculate1函数进行加减乘除取余操作,和其他语言一致
    function calculate1 (int a,int b) public pure returns(int,int,int,int,int){
        return (a+b,a-b,a*b,a/b,a%b);
    }

//定义 calculate2函数进行 a^b操作,和其他语言有一些区别
// 值得注意的是:如果使用 int类型的 a,b,会报错,因为 int^int不一定为int
    function calculate2 (uint a,uint b) public pure returns(uint){
        return a**b;
    }



// 位运算 &,|,~,^,>>,<<与其他语言一致
    function BitOperation1 (uint8 a,uint8 b) public pure returns(uint8){
        return a&b;
    }
    function BitOperation2 (uint8 a,uint8 b) public pure returns(uint8){
        return a|b;
    }
    function BitOperation3 (uint8 a) public pure returns(uint8){
        return ~a;
    }
    function BitOperation4 (uint8 a,uint8 b) public pure returns(uint8){
        return a^b;
    }
    function BitOperation5 (uint8 a,uint8 b) public pure returns(uint8){
        return a>>b;
    }
    function BitOperation6 (uint8 a,uint8 b) public pure returns(uint8){
        return a<<b;
    }

}

学数据类型的时候其实大部分和其他语言是一致的,唯一一个感觉特别明显的差异在solidity语言会尽可能需要代码占用空间越小越好,比如能用int8绝对不用int,其主要原因是区块链部署上去是需要消耗gas,也就是以太币,内容越大,写操作越多,耗费越大,这也就是为什么函数如果只是读,用view,不进行写操作使用pure进行限制的原因

另一个一般在别的语言中我可能不太可能会遇到的问题是,因为需要使数据类型尽可能小,比如使用int8时,一定要注意数据计算过程中是否会越界溢出!

猜你喜欢

转载自blog.csdn.net/wy_97/article/details/85321771