📜  Solidity 中的数学运算

📅  最后修改于: 2022-05-13 01:55:04.794000             🧑  作者: Mango

Solidity 中的数学运算

Solidity是由以太坊创建的一种全新的编程语言,以太坊是按市值计算的第二大加密货币市场,于 2015 年发布,由 Christian Reitwiessner 领导。以太坊是一个基于区块链领域的去中心化开源平台,用于运行智能合约,即完全按照程序执行程序的应用程序,没有任何欺诈、第三方干扰、审查或停机的可能性

智能合约是高级程序代码,被编译为 EVM 字节码并部署到以太坊区块链以供进一步执行。它使我们能够在不受第三方干扰的情况下进行可信的交易,这些交易是可追踪且不可逆转的。 Solidity 中的数学运算就像我们在现实生活中使用这些运算一样简单。 Solidity 中有以下数学运算:

  1. 加法 (x + y)
  2. 减法:(x - y)
  3. 乘法 (x * y)
  4. 除法 (x / y)
  5. 模量 (x % y)
  6. 指数 (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;
    }
}

笔记:

  1. 可以看到,我们将两个 64 位的 Integer 相除,并成功地将结果存储到了一个 128 位的 Integer 中。
  2. 这仅在乘法和除法运算的情况下才有可能。

输出:

分配

模数或余数

此操作返回两个数相除过程的余数。

示例:在下面的示例中,创建了一个包含三个函数的合约,其中前两个函数负责设置变量的值,第三个函数通过将第二个数字除以第一个数字来生成余数。在模运算中,所有变量必须是相同位长的整数。

坚固性

// 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;
    }
}

输出:

求幂

笔记:

  1. 此外,加法、减法和取模的所有操作数都必须是大小相同的整数。
  2. 在除法和乘法中,计算的答案可以存储在较大的位整数中,但操作数必须是相同大小的整数。
  3. 在 Exponentiation函数中,操作数必须是无符号整数。低位无符号整数可以计算并存储在更高但无符号整数中。
  4. 您需要为所有操作数设置相同的数据类型,以便对它们应用数学运算,否则它们将不会执行。