Solidity第二次作业

目录

第一题

第二题

第三题

第四题

第五题

第六题


第一题

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.6.0;
contract math {
    //1.根据所属类型值域,修改变量numa与numb值
    uint8 numa = 256;
    int8 numb = 128;
    int numc = 255;

function square(uint a , uint b) public pure returns(uint){
    //2.请你补充代码,使得返回的值为输入参数a的b次方。

}

答案

通过公式推导无符号整型取值范围:[0 , (2的位次方)-1]

无符号整型8位的取值范围是 [0 , 255 ] 

通过公式推导整型取值范围: [ -2的位次方-1 , ( 2的位次方-1)-1]

整型8位的取值范围是[-128 , 127]

如果不写多少位,那么默认为256位

1.对应的值设置范围内即可

2.运用幂运算符 a**b;

第二题

// SPDX-License-Identifier: MIT 
pragma solidity ^0.8.0; 
contract Math{ 
    uint8 a = 3; 
    uint8 b = 4; 
// LogicAnd函数返回的值是?  (1)
    function LogicAnd() public view returns(uint8){ 
        return a&b;
}  
//LogicOr函数返回的值是?    (2)   
    function LogicOr() public view returns(uint8){ 
        return a|b; 
}
//reverse函数返回的值是?   (3)
    function reverse() public view returns(uint8){ 
        return ~a; 
}
//xor函数返回的值是?   (4)
    function xor() public view returns(uint8){ 
        return a^b; 
}
//leftShift函数返回的值是?   (5)
    function leftShift() public view returns(uint8){
        return a<<1; 
}
//rightShift函数返回的值是?    (6)
    function rightShift() public view returns(uint8){ 
        return a>>1; 
    }

第三题

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.6.0;
contract demo{
    //1.函数add将会返回什么值?  (1)
    function add() public pure returns (uint8 _overflow) {
        uint8 max = 256 - 1;
        return max + 1;
    } 
   //2.函数sub将会返回什么值?   (2)
 function sub() public pure returns (uint8 _underflow) {
     uint8 min = 0;
     return min - 1;
 }
   //3.函数mul将会返回什么值?    (3)
 function mul_overflow() public pure returns (uint8 _overflow) {
     uint8 mul = 128;
     return mul*2 ;
 }
}

  //4.请查阅资料,理解整型溢出的原理。思考是否有防范整型溢出的方法并对上面的代码进行防溢出的优化。

答案

1.根据溢出原理,这是向上溢出,那么溢出后值会变成最小值,返回0

2.根据溢出原理,这是向下溢出,那么溢出后值会变成最大值,返回255

3.根据溢出原理,这是向上溢出,那么溢出后值会变成最小值,返回0

4.可以通过SafeMath库来解决溢出问题,详细请看(14条消息) Solidity拓展:数学运算过程中数据长度溢出的问题_尽-欢的博客-CSDN博客

 

第四题

    //实验1
// SPDX-License-Identifier: GPL-3.0
pragma solidity^0.8.0;
contract helloworld{
//1.哪些函数将编译失败? (函数1,函数2,还是函数3?)
function intergerTest1() public view returns(uint){
      uint num = 2/4;
      return num ;
      }
function intergerTest2() public view returns(uint){
      uint num = 2/4*10000;
      return num ;   
      }
function intergerTest3() public view returns(uint){
      uint num = 2/6*10000;
      return num ;   
      }
}

 

//实验2

/*2.现在如果你的电脑有其他编程语言比如java,请打开编辑器并用实验2中的方法定义3个

整数类型,比较java语言和solidity语言之间结果的不同*/
uint num1 = (2*800+1)-2*800;
uint num2 = 2/4*10000;
uint num3 = 2/4;

答案 

1.函数1和函数3将编译失败,因为计算的结果为小数,不能赋值给无符号整型变量,应为ufixed(无符号浮点)

2.java在数字运算中如果结果出现小数那么采取取整机制,而在solidity中int和uint出现了小数它不会采取取整机制,而是立马报错

第五题

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0; 
contract ByteArray{ 

//1.根据赋值的数值长度为变量num1,num2,num3声明正确的固定长度字节类型。
bytes1 public num1 = 0x7a;     //0111 1010
bytes2 public num2 = 0x7a68;    //0111 1010 0110 1000
bytes12 public num3 = 0x7a68656e676a69616e78756e;  //96位

//2.以下三个函数的返回值为
function getLength() public view returns(uint){
     return num1.length;
}   
function getLength2() public view returns(uint){
     return num2.length;

 function getLength3() public view returns(uint){
     return num3.length;
}  
function setLength() public {
     num1.length = 18;   // 3.判断字节数组长度是否能改变? (是或否)
}
}

答案

1.没有错误,不需要修改

2.第一个函数为1,第二个函数为2,第三个函数为12

3.不能,定长数组长度不能改变

第六题

     // SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract DynamicByte{
    bytes public name = new bytes(2);
    function Initname ()public{
        name[0] = 0x7a;
        name[1] = 0x68;
    }
    function getLength() public view returns(uint) {
        return name.length;
    }

//1.补充changename函数代码,将name字节索引0处的字符改为0x88。
    function changename()public{


    }

/*2.补充pushBytes函数代码,使用push关键字对动态字节name追加一个字节,思考追加字符在字节中的位置。(如:0x99)*/
    function pushBytes()public{


    }

 //3.补充bytesToString函数功能,将bytes类型的name转换为string类型并返回。
 function bytesToString()public view returns(string memory){
  
 }
}

答案

1.ascll码0x88转化为16进制转换为十进制为136,但是只能到126编译出错,因此不能改为0x88可以改为0x33  name[0] = 0x33;

2.name.push(0x99);  追加的位置为末尾

3.string(name); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值