Solidity第二次作业

news/2024/12/28 11:44:55/

目录

第一题

第二题

第三题

第四题

第五题

第六题


第一题

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


http://www.ppmy.cn/news/596358.html

相关文章

python3.8中使用MySQL数据库时ModuleNotFoundError: No module named ‘MySQLdb‘

本项目是使用django4.0&#xff0c;python3.8实现一个bug管理系统使用mysql初始化数据报错&#xff1a; MySQL数据库时ModuleNotFoundError: No module named MySQLdb&#xff0c;找到了很多例子都解决不了。 解决的步骤&#xff1a; 1、使用命令安装模块 pip3 install pym…

python selenium 定位鼠标悬浮后的新弹窗数据

背景 最近需要获取网页上的标签数据&#xff0c;但是标签大于3个以后是隐藏的&#xff0c;需要鼠标hover上去才显示。如下图&#xff0c;图一是刚进来界面展示的&#xff0c;需要知道额外的7个标签则需要将鼠标移动到目标上面去。 但是比较尴尬的一个点是&#xff0c;当游览器打…

new String()创建几个对象

String str1 "abc"; // 在常量池中当直接赋值时&#xff0c;字符串“abc”会被存储在常量池中&#xff0c;只有1份&#xff0c;此时的赋值操作等于是创建0个或1个对象。如果常量池中已经存在了“abc”&#xff0c;那么不会再创建对象&#xff0c;直接将引用赋值给s…

江民杀毒 90天试用序列号申请

台湾电脑人网站送的&#xff0c;要填一下调查资料http://qa.pcuser.com.tw/event/0608/index.htm

查杀流氓软件

一、背景 前两天在百度上下载了一个串口驱动和迅捷OCR&#xff0c;安装完成之后&#xff0c;每天按时给我装N个流氓软件。今天卸载完了&#xff0c;明天继续给安装&#xff01;&#xff01;&#xff01; 二、教训 下载软件去官网&#xff01;去官网&#xff01;去官网&#xff…

国内著名杀毒软件厂商江民公司的主页遭到黑客攻击

转载自先锋网原文链接&#xff1a;http://www.pcpchina.com/news/list.asp?id5562国内著名杀毒软件厂商江民公司的主页遭到黑客攻击 自称“河马史诗”的黑客在页面上留言 “NND,你们去论坛看看,一片怨声载道,你们干什么去了?!By 河马史诗 ” 下面是截图&#xff0c;截至小…

十二款世界顶级杀毒软件下载---有序列号全可免费升级

关键字&#xff1a;杀毒软件,安全,BitDefender,Kaspersky,F-Secure Anti-Virus,PC-cillin,ESET Nod32,McAfee VirusScan,Norton AntiVirus,AVG Anti-Virus,eTrust EZ Antivirus,Norman Virus Control,AntiVirusKi,AVAST 十二款世界顶级杀毒软件下载---有序列号全可免费升级 200…

卡巴斯基起诉江民杀毒软件侵权

据俄罗斯“卡巴斯基实验室”信息服务处领导人奥列佳-科布扎列娃称&#xff0c;著名的俄罗斯反病毒程序开发公司--“卡巴斯基实验室”日前向外界宣称&#xff0c;中国一家大型反病毒软件生产公司正在秘密从“卡巴斯基实验室”公司的俄文网站上获取反病毒数据资料。 新浪消息称&a…