Skip to content

Latest commit

 

History

History
116 lines (90 loc) · 3.57 KB

File metadata and controls

116 lines (90 loc) · 3.57 KB

2024.09.23

101-01

// 声明软件许可
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;
contract HelloWeb3 {       //contract创建合约,并声明合约名为‘HelloWeb3’
    string public _string = "Hello Web3!"; //创建了一个名_string的string变量
}
//每行代码以;结束

101-02

/*
solidity中有3种常用的变量类型
1.值类型(value type):包括布尔型、整型等,这类变量赋值时直接传递数值
2.引用类型(Reference type):包括数组和结构体,占用空间大,赋值时直接传递地址
3.映射类型(mapping type):solidit中存储键值对的数据结构,可以理解为哈希表*/ 

// 值类型
// 1.bool
/*布尔值的运算符
!   逻辑非
&&  逻辑与(and) 
||  逻辑或(or)
==  等于
!=  不等于*/

contract Bool1 {
    //布尔值
    bool public _bool = false ;
    //布尔运算
    bool public _bool1 = ! _bool;
    bool public _bool2 = _bool && _bool1;//所有结果true才输出true//
    bool public _bool3 = _bool || _bool1;//任一为true就输出true//
    bool public _bool4 = _bool == _bool1;
    bool public _bool5 = _bool != _bool1;
    //&&和||遵循短路原则:&&中第一个条件为false不会再继续判断;||第一个条件为true时不会再继续判断//
}

contract Integer {
//2.整型

    int public _int = -1;//整数,包括负数
    uint public _uint = 0;//非负整数
    uint256 public _num = 20240923;//256位非负整数

    //比较运算符(返回布尔值): <=, <, ==, !=, >=,>//
    //整数运算符:+ - * / %(取余) **(幂)
    
    uint256 public _num1 = _num + 1;
    uint256 public _num2 = _num1 - _num;
    uint256 public _num3 = _num * 2;
    uint256 public _num4 = _num / 2;
    uint256 public _num5 = 10%4;
    uint256 public _num6 = 2**5;
    bool public _numbool = _num1 > _num2;
}

contract Address {
//3.地址类型
    /*地址类型有两类:
    1.普通地址(address) 存储一个20字节[以太坊地址大小]的值
    2.payable address,比address多了transfer,send两种成员方法用于接收转账*/
    
    address public _address = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
    address payable public _address1 = payable (_address);

    uint256 public _balance = _address.balance;//.balance是solidity内置属性,用来查询地址ETH余额,单位为wei(10^-18eth)
}

contract Bytes {

    //字节数组//
    /*字节数组分为定长和不定长两种:
    定长: 属于值类型,数组长度在声明之后不能改变。根据字节数组的长度分为不同类型。定长字节数组最多存储32bytes数据,即bytes32。
    不定长: 属于引用类型,数组长度在声明之后可以改变,包括bytes等。*/
    
    bytes32 public _bytes32 = "Craig.yc";
    bytes1 public _byte1 = _bytes32[0];//索引_byte32的第一个字节(索引从0开始1),获取到C的ASCII值并存储在_bytes1中
}





//习题//



contract Enum {
    //enum是自定义的数据类型,主要用于为uint分配名称,提升可读性//
    enum ActionSet {Buy, Hold, Sell}
    ActionSet action = ActionSet.Buy;
}
//测试习题中的问题//
contract test {
    address payable public addr = payable(0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2);
    function sendEther() external payable {
        addr.transfer(1);
    }//虽然报错,但应该是合约转入addr//
}
//bytes4 表示4字节(32bit),4bit=1十六进制位//


contract test_5 {
    bool public a = 1+1!=2||0/1==1;//false
    bool public b = 1+1!=2||1-1>0;//false
    bool public c = 1+1==2&&1**2==2;//false,后者为false,全true才输出true
    bool public d = 1-1==0&&1%2==1;//true,全true
}