Solidity第二次作业

news2024/9/23 23:25:00

目录

第一题

第二题

第三题

第四题

第五题

第六题


第一题

// 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.coloradmin.cn/o/689736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安科瑞无线测温系统在高压开关柜中的应用

摘要&#xff1a;高压开关柜是配电系统中重要的组成部分&#xff0c;其主要作用是控制电荷、分配电能和开断电流等&#xff0c;对维持系统的稳定性有一定的保障作用。将无线测温技术应用于高压开关柜&#xff0c;可以实现对其进行实时的动态监测&#xff0c;有助于相关工作人员…

使用CSS的polygon属性画各个方向的半圆环

CSS的polygon属性 CSS polygon()函数是一个图形函数&#xff0c;用于指定某种基本图形类型。polygon()函数用于定义一个多边形 .container{width: 50px;height: 50px;border: 13px solid #0c73fe;border-radius: 50px;/* 上半圆环 */clip-path: polygon(100% 50%, 0 50%, 0 0, …

Redis cluster集群搭建集群增删集群节点

1.Redis cluster集群架构&#xff08;本机ip:192.168.2.100&#xff09; 建立三台linux服务器&#xff0c;分别是192.168.2.61、192.168.2.62、192.168.2.63 1.1.建立192.168.2.61Linux服务器 1.配置Linux服务器 # 在 /etc/sysconfig/network-scripts/ifcfg-eno16777736文件…

C# 读写ABPLC( Allen Bradley)

1.安装 libplctag.net库 GitHub - libplctag/libplctag.NET: This is a .NET wrapper for libplctag. 2.PLC IP和tag 3.写入值 var myTag new TagReal(){//Name is the full path to tag. Name "HMI_F26[0]",//Gateway is the IP Address of the PLC or communicat…

7-WebApis-3

Web APIs - 3 目标&#xff1a;学习事件流&#xff0c;事件委托&#xff0c;其他事件等知识&#xff0c;优化多个事件绑定和实现常见网页交互 事件流移除事件监听其他事件元素尺寸与位置综合案例 事件流 为什么要学习事件流&#xff1f; 可以帮我们解决一些疑惑&#xff0c;比…

npm全局安装的包在cmd能找到,在powershell中找不到

背景 使用npm i g 全局安装的包&#xff0c;比如&#xff1a;eslint&#xff1b;安装完成后&#xff0c;执行eslint相关命令&#xff0c;显示命令不存在&#xff1b;以为是node没配置全局环境变量&#xff0c;检查发现配置了&#xff1b;后来试了一下在cmd是可以使用的&#x…

蓝桥杯专题-试题版-【十进制转十六进制】【十六进制转八进制】【十六进制转十进制】【数的读法】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

TCP客户端的WPF实现

1、TCP实现类 internal class TcpClient{Socket ClientSocket { get; set; }public byte[] ReceiveBuffer { get; set; }/// <summary>/// 构造函数/// </summary>/// <param name"receiveBufferLength"></param>public TcpClient(int rece…

关于Eclipse 运行JavaWeb项目发生Source not found的情况

描述是说&#xff0c;class源文件未找到。其实问题就是出在没有部署。但是我们查看部署时&#xff0c;发现我们已经部署过了。 其实&#xff0c;这个比较细节的地方。 你可以右键单击这个jsp项目&#xff0c;然后点击 run as。发现它其实是没有配置run运行文件。这就导致是发现…

【wireshark】时间显示

默认的好像是个相对时间 可以显示当前时间 在视图里选择

Xcode 常用操作相关

代码折叠 选择 Xcode -> Preferences -> Text Editing勾选Code folding ribbon 清空最近打开项目 File -> Open Recent -> Clear Menu

模板匹配Template Matching

实现代码&#xff1a; import cv2 import numpy as np def template_demo(tpl,target):methods[cv2.TM_SQDIFF_NORMED,cv2.TM_CCORR_NORMED,cv2.TM_CCOEFF_NORMED]th,twtpl.shape[:2]for md in methods:start_timecv2.getTickCount()# 匹配结果resultcv2.matchTemplate(target…

【Linux】linux | shell | 获取日期

1、获取上一天 1&#xff09;代码 date -d "1 days ago" %Y-%m-%d 2&#xff09;结果 ~~

chatgpt赋能python:Python计算累乘的优秀解决方案

Python计算累乘的优秀解决方案 在python编程中&#xff0c;经常需要进行数值计算。其中一个最基本的计算就是累乘。累乘可以基于一组数字进行&#xff0c;计算它们的乘积。比如&#xff0c;如果输入的数字序列是[1,2,3,4]&#xff0c;则累乘结果为24。 在本文中&#xff0c;我…

MediaPipe简介

有没有想过“OK Google”背后的含义是什么?嗯,这就是 MediaPipe。如果您刚刚开始使用 MediaPipe,并且这是您阅读的第一篇文章,那么恭喜您,您找到了正确的地方。本文将介绍MediaPipe的基础知识、解决方案之间的差异以及框架。 官方文档指出,推理是实时的,只需几行代码即可…

Qt定时器类QTimer

目录 public/slot function signals static public function 示例&#xff08;获取系统时间并且将其显示到窗口中&#xff09;&#xff1a; 示例主要代码&#xff08;每间隔一秒向控制台发送一条消息&#xff09;&#xff1a; 注意事项&#xff1a; Qt定时器类QTimer是一个…

Bootstrap CSS 概览

文章目录 Bootstrap CSS 概览HTML 5 文档类型&#xff08;Doctype&#xff09;移动设备优先响应式图像全局显示、排版和链接基本的全局显示排版链接样式 避免跨浏览器的不一致容器&#xff08;Container&#xff09;Bootstrap 浏览器/设备支持 Bootstrap CSS 概览 在这一章中&a…

iOS-苹果内购的流程图

关于苹果内购的开发文章有很多&#xff0c;如&#xff1a; Flutter上线项目实战——苹果内购 苹果内购流程&#xff0c;看我就足够了 - 简书 。 下面这是一张苹果内购的流程图。 ​​​​​​​ 该图来源于苹果官网&#xff0c;但不够清晰&#xff0c;欢迎各位网络大牛 告知…

关于cdh环境中zookeeper启动失败NodeManager内存溢出无法链接等的问题

在此记录一下 1、zookeeper一直启动失败&#xff1a; 看你的事物目录配置的是什么 解决方法&#xff1a;删除掉/var/lib/zookeeper/version-2 为0kb的有问题文件&#xff0c;问题解决 2、NodeManager内存溢出无法链接等的问题 注意几点&#xff1a; 1、这里不能超过物理内存…

MySQL数据库学习(保姆级教程)(1.7W字)

1.初识MySQL JavaEE:企业级Java开发 Web 前端&#xff08;页面&#xff1a;展示&#xff0c;数据&#xff01;&#xff09; 后台&#xff08;连接点&#xff1a;连接数据库JDBC&#xff0c;链接前端&#xff08;控制&#xff0c;控制视图跳转&#xff0c;和给前端传递数据&a…