Solidity 中的数学运算
Solidity是由以太坊创建的一种全新的编程语言,以太坊是按市值计算的第二大加密货币市场,于 2015 年发布,由 Christian Reitwiessner 领导。以太坊是一个基于区块链领域的去中心化开源平台,用于运行智能合约,即完全按照程序执行程序的应用程序,没有任何欺诈、第三方干扰、审查或停机的可能性
智能合约是高级程序代码,被编译为 EVM 字节码并部署到以太坊区块链以供进一步执行。它使我们能够在不受第三方干扰的情况下进行可信的交易,这些交易是可追踪且不可逆转的。 Solidity 中的数学运算就像我们在现实生活中使用这些运算一样简单。 Solidity 中有以下数学运算:
- 加法 (x + y)
- 减法:(x - y)
- 乘法 (x * y)
- 除法 (x / y)
- 模量 (x % y)
- 指数 (x**y)
在本文中,我们将通过示例详细讨论这些操作。
添加
加法运算涉及将两个数字相加并生成和。
示例:在下面的示例中,创建了一个合约,其中包含两个函数来设置两个变量的值,以及第三个函数来添加两个变量并返回总和。
Solidity
// Solidity program to
// demonstrate addition
pragma solidity 0.6.6;
contract gfgMathPlus
{
// Declaring the state
// variables
uint firstNo ;
uint secondNo ;
// Defining the function
// to set the value of the
// first variable
function firstNoSet(uint x) public
{
firstNo = x;
}
// Defining the function
// to set the value of the
// second variable
function secondNoSet(uint y) public
{
secondNo = y;
}
// Defining the function
// to add the two variables
function add() view public returns (uint)
{
uint Sum = firstNo + secondNo ;
// Sum of two variables
return Sum;
}
}
Solidity
// Solidity program to
// demonstrate the subtraction
pragma solidity 0.6.6;
contract gfgSubract
{
// Initializing the
// state variables
int16 firstNo=2 ;
int16 secondNo=10;
// Defining a function
// to subtract two numbers
function Sub() view public returns (int16)
{
int16 ans = firstNo - secondNo ;
// Difference amount
return ans;
}
}
Solidity
pragma solidity 0.6.6;
contract gfgMultiply {
int128 firstNo ;
int128 secondNo ;
function firstNoSet(int128 x) public {
firstNo = x;
}
function secondNoSet(int128 y) public {
secondNo = y;
}
function multiply() view public returns (int128) {
int128 answer = firstNo * secondNo ;
return answer;
}
}
Solidity
// Solidity program to
// demonstrate the
// division operation
pragma solidity 0.6.6;
// Creating a contract
contract gfgDivide
{
// Declaring the
// state variables
int128 firstNo ;
int128 secondNo ;
// Defining a function
// to set the value of
// the first variable
function firstNoSet(int64 x) public
{
firstNo = x;
}
// Defining function
// to set the value of
// the second variable
function secondNoSet(int64 y) public
{
secondNo = y;
}
// Defining function to
// return the result
function Divide() view public returns (int128)
{
int128 answer = firstNo / secondNo ;
return answer;
}
}
Solidity
// Solidity program to
// demonstrate the
// Modulus operation
pragma solidity ^0.6.6;
// Creating a contract
contract gfgModulo
{
// Declaring state variables
uint firstNo ;
uint secondNo ;
// Defining a function
// to set the value of
// the first variable
function firstNoSet(uint x) public
{
firstNo = x;
}
// Defining a function
// to set the value of
// the second variable
function secondNoSet(uint y) public
{
secondNo = y;
}
// Defining a function to return
// the modulus value
function Modulo() view public returns (uint)
{
uint answer = firstNo % secondNo ;
return answer;
}
}
Solidity
// Solidity program to
// demonstrate the
// exponentiation operation
pragma solidity ^0.6.6;
// Creating a contract
contract gfgExpo
{
// Declaring the state
// variables
uint16 firstNo ;
uint16 secondNo ;
// Defining the first function
// to set the value of
// first variable
function firstNoSet(uint16 x) public
{
firstNo = x;
}
// Defining the function
// to set the value of
// the second variable
function secondNoSet(uint16 y) public
{
secondNo = y;
}
// Defining the function to
// calculate the exponent
function Expo() view public returns (uint256) {
uint256 answer = firstNo ** secondNo ;
return answer;
}
}
输出:
减法
减法运算涉及将两个数字相减并产生差值。在减法中,我们可以使用任何整数值(int16 到 int256),但所有操作数必须是相同的数据类型(相同位整数)。
示例:在下面的示例中,创建了一个合约,其中包含一个演示两个数字相减的函数。
坚固性
// Solidity program to
// demonstrate the subtraction
pragma solidity 0.6.6;
contract gfgSubract
{
// Initializing the
// state variables
int16 firstNo=2 ;
int16 secondNo=10;
// Defining a function
// to subtract two numbers
function Sub() view public returns (int16)
{
int16 ans = firstNo - secondNo ;
// Difference amount
return ans;
}
}
输出:
乘法
乘法运算处理通过将两个或多个数字相乘来生成乘积值。
示例:在下面的示例中,创建了一个包含三个函数的合约,其中前两个函数负责设置变量的值,第三个函数通过将前两个变量相乘生成一个乘积值。
坚固性
pragma solidity 0.6.6;
contract gfgMultiply {
int128 firstNo ;
int128 secondNo ;
function firstNoSet(int128 x) public {
firstNo = x;
}
function secondNoSet(int128 y) public {
secondNo = y;
}
function multiply() view public returns (int128) {
int128 answer = firstNo * secondNo ;
return answer;
}
}
输出:
分配
除法运算返回除法结果的商。
示例:在下面的示例中,创建了一个包含三个函数的合约,其中前两个函数负责设置变量的值,第三个函数通过将第二个数字除以第一个数字来生成商值。
坚固性
// Solidity program to
// demonstrate the
// division operation
pragma solidity 0.6.6;
// Creating a contract
contract gfgDivide
{
// Declaring the
// state variables
int128 firstNo ;
int128 secondNo ;
// Defining a function
// to set the value of
// the first variable
function firstNoSet(int64 x) public
{
firstNo = x;
}
// Defining function
// to set the value of
// the second variable
function secondNoSet(int64 y) public
{
secondNo = y;
}
// Defining function to
// return the result
function Divide() view public returns (int128)
{
int128 answer = firstNo / secondNo ;
return answer;
}
}
笔记:
- 可以看到,我们将两个 64 位的 Integer 相除,并成功地将结果存储到了一个 128 位的 Integer 中。
- 这仅在乘法和除法运算的情况下才有可能。
输出:
模数或余数
此操作返回两个数相除过程的余数。
示例:在下面的示例中,创建了一个包含三个函数的合约,其中前两个函数负责设置变量的值,第三个函数通过将第二个数字除以第一个数字来生成余数。在模运算中,所有变量必须是相同位长的整数。
坚固性
// Solidity program to
// demonstrate the
// Modulus operation
pragma solidity ^0.6.6;
// Creating a contract
contract gfgModulo
{
// Declaring state variables
uint firstNo ;
uint secondNo ;
// Defining a function
// to set the value of
// the first variable
function firstNoSet(uint x) public
{
firstNo = x;
}
// Defining a function
// to set the value of
// the second variable
function secondNoSet(uint y) public
{
secondNo = y;
}
// Defining a function to return
// the modulus value
function Modulo() view public returns (uint)
{
uint answer = firstNo % secondNo ;
return answer;
}
}
输出:
求幂
幂运算仅适用于无符号整数,其中可以计算低位无符号整数并将其存储在高位无符号整数中。
坚固性
// Solidity program to
// demonstrate the
// exponentiation operation
pragma solidity ^0.6.6;
// Creating a contract
contract gfgExpo
{
// Declaring the state
// variables
uint16 firstNo ;
uint16 secondNo ;
// Defining the first function
// to set the value of
// first variable
function firstNoSet(uint16 x) public
{
firstNo = x;
}
// Defining the function
// to set the value of
// the second variable
function secondNoSet(uint16 y) public
{
secondNo = y;
}
// Defining the function to
// calculate the exponent
function Expo() view public returns (uint256) {
uint256 answer = firstNo ** secondNo ;
return answer;
}
}
输出:
笔记:
- 此外,加法、减法和取模的所有操作数都必须是大小相同的整数。
- 在除法和乘法中,计算的答案可以存储在较大的位整数中,但操作数必须是相同大小的整数。
- 在 Exponentiation函数中,操作数必须是无符号整数。低位无符号整数可以计算并存储在更高但无符号整数中。
- 您需要为所有操作数设置相同的数据类型,以便对它们应用数学运算,否则它们将不会执行。