Aprenda solidez para escribir contratos inteligentes juntos - entero (uint e int)

prefacio

Los números enteros generalmente se usan más, y la existencia de números enteros se verá en varios contratos, por lo que este tipo también es indispensable en el camino del aprendizaje.

alrededores:

El compilador de remixes me hace clic para saltar

texto

Encontramos muchos tipos de datos enteros en sol, por lo que nuestro sol proporciona dos tipos de datos de enteros:

Entero con signo (int) : Aquí podemos entenderlo como un entero positivo y negativo

Entero sin signo (uint) : entero sin signo, donde solo existen números positivos y 0

Para tener un mejor control de la memoria, sol proporciona, int8, int16, int32, etc., tipos enteros sin signo hasta int256

Lo mismo es cierto para nuestros enteros sin signo, uint8, uint16, uint32...uint256

Entonces, a lo que debemos prestar atención en la selección es que para 0 ~ 256 bits de datos, podemos usar uint8, luego usamos int8 para almacenar números negativos con signo en números positivos - 128 ~ 127. De acuerdo con la situación real, subirá Can.

Algunos estudiantes tendrán curiosidad, ¿qué significa este 8, 16, 32... 256?

Aquí está nuestro binario, porque nuestra computadora está compuesta por el código 0101, por lo que la lógica de almacenamiento subyacente es binaria, luego aquí 00000000 representa 0 en binario, 11111111 representa 256 en binario, los estudiantes cuidadosos encontrarán este número El número es ocho, eso es todo, por lo que nuestro almacenamiento se almacena así

int y operador

Hay tres tipos de operadores admitidos por tipos enteros: operadores de comparación, operadores bit a bit y operadores aritméticos.

operador de comparación

<= (menor o igual que) < (menor que) == (igual a) != (no igual) >= (mayor o igual que) > (mayor que)

operadores bit a bit

&&(y) || (o) ^ (exclusivo o) ~ (inversión de bits)

operadores aritméticos

+ - Operador unario "-" Operador unario "+" * / % ** << >>

Después de mirarlo de nuevo, se estima que hay un problema con la operación de cambio de izquierda a derecha. Aquí hay una explicación.

Desplazamiento a la izquierda: a << b puede entenderse como a multiplicado por 2 elevado a b

Desplazamiento a la derecha: a >> b puede entenderse como a dividido por 2 elevado a b

El operador se utiliza de la siguiente manera:

uint256 public _uintNum = 12345; //Resultado entero: 12345

uint256 public _uintNum1 = _uintNum + 1; //resultado de la suma: 12346

uint256 public _uintNum2 = 2**2; // resultado del exponente: 4

uint256 public _uintNum3 = 7 % 2; //Resultado restante: 1

bool public _boolnum = _ uintNum2 > _uintNum3;//Resultado del juicio: verdadero

Precauciones

Método de declaración

int8 a = -1;

uint16 b = 1;

uintc;

intd;

En operaciones con enteros, si se encuentra una constante, se truncará. Si es una constante, no. Una constante es una cantidad que tiene un valor cuando se define y no cambia. Si encuentra 0, es ilegal y se informará un error.

El desplazamiento hacia la izquierda y hacia la derecha es para mover la posición binaria. Ahora tenemos un número binario como 10000, que es 32 en decimal. Luego nos movemos hacia la derecha hasta 1000, y lo mismo ocurre con el desplazamiento hacia la izquierda.

No puedes pensar negativamente, no puedes volverte negativo

Los números negativos no se pueden exponenciar, es decir "**"

pragma solidity ^0.4.23; //表示编译器的版本,^代表大版本为4即可
contract UintTest{ //创建一个合约 自定义合约名为UintTest
uint a = 10; // 定义一个变量a为10
uint b = 2; // 定义一个变量b为2
function getUint() public view returns(uint){// 定义一个函数 函数名为getUint 权限为公共 只读 返回一个uint类型 
uint sum = a ** b + 3 % 2;// 定义一个uint类型使用运算符a的b次方加3取余2最后的结果为101
return sum;// 返回sum
}
}

 

Supongo que te gusta

Origin blog.csdn.net/qq_57309855/article/details/127349858
Recomendado
Clasificación