区块链学习(4) – Solidity开发入门

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Solidity是一种静态类型的编程语言,其基本数据类型可以分为以下几类:

1、布尔型(Booleans):布尔型变量有两个值,truefalse。Solidity支持常见的布尔运算符,如!(非)、&&(与)、||(或)等。

bool isReady = true;

2、整型(Integers):整型分为有符号整型int和无符号整型uint。整数类型可以有不同的位宽,如int8int16int256,其中后缀表示其位宽。默认情况下,intuint分别是int256uint256的别名。

这里以int8为例子

(1)位宽:int8的位宽为8位。这意味着它可以表示的整数范围是从-2^(8-1)(即-128)到2^(8-1) - 1(即127)。

(2)有符号:int8是有符号整数类型,意味着它可以表示正数、负数和零。如果需要表示0到255范围内的正整数,可以使用无符号整数类型uint8

(3)运算:int8支持常见的整数运算,包括加法(+)、减法(-)、乘法(*)、除法(/)和求模(%)。此外,还支持位运算(如按位与&、按位或|、按位异或^、按位取反~、左移<<和右移>>)和比较运算(如等于==、不等于!=、大于>、小于<、大于等于>=和小于等于<=)。

(4)溢出:在进行算术运算时,要注意整数溢出的问题。Solidity 0.8.0及更高版本默认会在整数溢出或下溢时抛出异常。对于早期版本的Solidity,建议使用SafeMath库来防止整数溢出。Solidity 0.8.7是一个比较稳定的版本

uint256 age = 30;
int8 score = -10;

3、地址(Addresses):address类型表示eth地址。此类型有一些内置方法,如transfer(发送以太币)、balance(查询余额)等。

address owner = 0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c;

4、定长字节数组(Fixed-size byte arrays):定长字节数组用于表示特定长度的字节序列。类型为bytes1bytes32

bytes32 hash = 0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef;

6、动态字节数组(Dynamically-sized byte arrays):动态字节数组用于表示可变长度的字节序列。类型为bytesstring

bytes data;
string message = "Hello, world!";
在Solidity中,string类型是动态长度的字节数组(bytes类型的别名)。string类型的大小并不固定,它可以根据实际存储的字符串长度进行调整。字符串中的每个字符占用一个字节,因此string类型的位数(bit size)取决于字符串的长度。
例如,长度为5个字符的字符串将占用5 * 8 = 40位。但请注意,Solidity使用UTF-8编码来处理字符串,因此对于需要多个字节表示的字符(如某些特殊符号、表情符号或其他Unicode字符),实际占用的位数可能会更多。
在Solidity中,字符串存储在EVM的内存(memory)和存储(storage)中。字符串长度的变化会影响合约的Gas消耗,因为更长的字符串会占用更多的存储空间。在处理字符串时,务必注意优化数据存储和操作以节省Gas成本。

7、枚举(Enums):枚举用于表示预定义的值集合。枚举类型需要在合约中单独声明。

enum State { Created, Locked, Inactive }
State public currentState = State.Created;

8、数组(Arrays):数组可以是定长或动态长度。数组元素可以是任意类型,包括其他数组。

uint256[] public dynamicArray;
uint256[5] fixedArray;

9、结构体(Structs):结构体是一种自定义类型,允许你创建更复杂的数据结构。

struct Player {
    address playerAddress;
    uint256 level;
    uint256 experience;
}
Player public player1 = Player(0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c, 1, 0);

10、映射(Mappings):映射是一种哈希表数据结构,将键类型映射到值类型。映射的键和值类型可以是任意类型,除了映射本身。

mapping(address =>uint256) public balances;

mapping(uint256 => Player) public players;


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: 区块链