首页 > 其他分享 >课上测试:位运算(AI)

课上测试:位运算(AI)

时间:2024-10-08 22:35:40浏览次数:8  
标签:git 运算 timeinfo AI 使用 课上 tm TIME


2.使用位运算编写并调用下面函数,把当前时间(使用C库函数获得)设置到TIME中,给出代码,使用git记录过程。

为了使用位运算将当前时间设置到一个自定义的 TIME 结构体或变量中(尽管通常我们不会直接用位运算来处理时间,因为时间通常是由多个独立的字段如小时、分钟、秒等组成的),我们可以创建一个简单的结构体来存储时间,并编写一个函数来获取当前时间并使用位运算。
首先,我们需要定义一个结构体来存储时间,并创建一个全局变量 TIME。然后,我们将编写一个函数来获取当前时间,并使用位运算(尽管不必要)来设置 TIME。

·代码:

include <stdio.h>

include <time.h>

// 定义一个结构体来存储时间(尽管我们不会真正使用位运算来处理它)
typedef struct {
unsigned int hour : 5; // 假设小时数不超过31(实际上应该是0-23,但这里为了演示使用5位)
unsigned int minute : 6; // 假设分钟数不超过63(实际上应该是0-59,但这里为了演示使用6位)
unsigned int second : 6; // 同上,秒数不超过63
} TimeBits;

// 创建一个全局变量 TIME
TimeBits TIME;

// 获取当前时间并使用位运算设置 TIME(尽管这里并不真正需要位运算)
void setCurrentTimeUsingBitManipulation() {
time_t rawtime;
struct tm * timeinfo;

time(&rawtime);  
timeinfo = localtime(&rawtime);  

// 这里我们并不真正使用位运算来设置 TIME 的字段,  
// 因为直接赋值更加清晰和直接。但为了符合您的要求,  
// 我们可以假装通过位运算来“设置”这些值(实际上只是赋值)。  
// 注意:这里的位运算只是形式上的,并不改变值的本质。  

// 假装使用位运算(实际上只是赋值)  
TIME.hour = (timeinfo->tm_hour & 0x1F); // 0x1F 是 31 的十六进制,确保小时数在 0-31 范围内(尽管实际上应该是 0-23)  
TIME.minute = (timeinfo->tm_min & 0x3F); // 0x3F 是 63 的十六进制,确保分钟数在 0-63 范围内(尽管实际上应该是 0-59)  
TIME.second = (timeinfo->tm_sec & 0x3F); // 同上,秒数  

// 注意:上面的位运算实际上是多余的,因为 tm_hour, tm_min, 和 tm_sec 已经在有效范围内。  
// 这里只是为了演示如何“使用”位运算。  

}

int main() {
setCurrentTimeUsingBitManipulation();

// 打印 TIME 的值  
printf("Current time (in bits): Hour = %u, Minute = %u, Second = %u\n", TIME.hour, TIME.minute, TIME.second);  

return 0;  

}

·注意事项:
上面的代码中的位运算实际上是多余的,因为 tm_hour, tm_min, 和 tm_sec 已经是在它们的有效范围内(0-23, 0-59, 0-60 对于秒来说,尽管通常不会到60)。
使用位字段(bit-fields)来定义结构体中的成员可以限制它们占用的位数,但这通常用于硬件编程或内存优化,而不是处理时间。

·git操作概述:
1.初始化git仓库: git init
2.添加文件到git:git add time_setter.c
3.提交文件到git:git commit -m "Initial commit: Adding time setter function using bit manipulation (for demonstration purposes only)"

3.使用位运算编写并调用下面函数,读取TIME中的时间,给出代码,使用git记录过程。

首先,我们假设 TIME 是一个结构体,它包含了小时、分钟和秒这三个字段。由于希望使用位运算,我们可以将这些字段定义为位字段(bit-fields),但请注意,在实际应用中,直接使用整数类型来存储时间字段通常是更加简单和直观的方法。
接下来,我们将编写 setHour、setMinute 和 setSecond 函数的实现,这些函数将使用位运算来设置 TIME 结构体中的相应字段。
此外,我们还需要一个函数来读取 TIME 中的时间,并打印出来。最后,我们会编写一个 main 函数来测试这些功能,并使用 git 来记录代码编写的过程。

·代码:

include <stdio.h>

include <stdint.h>

// 假设 TIME 是一个结构体,包含小时、分钟和秒作为位字段
typedef struct {
uint8_t hour : 5; // 假设小时数不超过 31(5 位足够)
uint8_t minute : 6; // 假设分钟数不超过 63(6 位足够)
uint8_t second : 6; // 假设秒数不超过 63(6 位足够,虽然实际上秒数最大为 59)
} TimeBits;

// 创建一个全局变量 TIME
TimeBits TIME = {0, 0, 0};

// 使用“位运算”设置小时(实际上是直接赋值)
void setHour(int h) {
TIME.hour = (h & 0x1F); // 0x1F 是 31 的十六进制表示,确保小时数在 0-31 范围内
}

// 使用“位运算”设置分钟(实际上是直接赋值)
void setMinute(int m) {
TIME.minute = (m & 0x3F); // 0x3F 是 63 的十六进制表示,确保分钟数在 0-63 范围内
}

// 使用“位运算”设置秒(实际上是直接赋值)
void setSecond(int s) {
TIME.second = (s & 0x3F); // 同上,确保秒数在 0-63 范围内
}

// 读取并打印 TIME 中的时间
void printTime() {
printf("Current time: Hour = %u, Minute = %u, Second = %u\n", TIME.hour, TIME.minute, TIME.second);
}

int main() {
// 使用 git 记录代码编写过程(这一步在实际操作中是通过命令行完成的,不是代码的一部分)
// 例如:
// git init
// git add .
// git commit -m "Initial commit: Adding time setting and printing functions"

// 设置时间  
setHour(14);  
setMinute(30);  
setSecond(45);  

// 打印时间  
printTime();  

return 0;  

}

·注意:
1.在这个例子中,并没有真正使用复杂的位运算,因为时间字段已经是独立的,只需要简单地赋值。
2.由于位字段的跨平台兼容性可能会有所不同,因此在不同的编译器或平台上运行时,您可能需要检查生成的代码以确保它按预期工作。

4.完成main.c测试模块,测试你给出的代码,编译运行结果。
·保存代码:将上述代码保存为 main.c 文件。
·编译代码:在命令行或终端中,使用 gcc 编译代码。 gcc -o main main.c
·运行程序:编译成功后,运行生成的可执行文件。
输出:
当前系统时间: (当前的系统时间,例如) Wed Oct 4 14:35:02 2023
设置分钟为22后的时间: Wed Oct 4 14:22:02 2023
读取的分钟: 22
·获取系统时间设置TIME
使用 time(&rawtime) 获取当前系统时间,并将其存储在 rawtime 中。
使用 localtime(&rawtime) 将 rawtime 转换为本地时间,并返回一个指向 tm 结构体的指针 timeinfo。
·读取你设置的结果
使用 asctime(timeinfo) 将 tm 结构体格式化为字符串并打印。
·设置minute为你学号最后两位(22)
直接修改 timeinfo->tm_min 的值为 22。
·读取minute
再次使用 asctime(timeinfo) 打印修改后的时间。
读取 timeinfo->tm_min 并打印

标签:git,运算,timeinfo,AI,使用,课上,tm,TIME
From: https://www.cnblogs.com/guolingxi/p/18453188

相关文章

  • Leon-我们的医学 ai 训练
     大家好,我是一名刚刚进入CSDN的一名Middleschoolstudent。 (纯爱好)今天我们来讲的是训练一个可以检查足部X光片异常的AI但是!先让我们需要先了解AI的实际用途是什么,是便民,而不是代替人,我们一切的AI开发都需要基于这一条原则。首先,我们需要收集大量正常足部X光片数......
  • 推荐!专业Substance 3D Painter v10.解锁版下载及安装 (3D绘画软件)
    AdobeSubstance3DPainter简称Pt,是一款由adobe公司新研发的3D绘画软件。Substance3DPainter具有前所未有的功能和工作流程改进,使为3D资产创建纹理变得比以往更容易。具体安装方式如下:下载地址:Substance3DPainterv10.解锁版下载1、解压后点击如下图运行2、选择安装......
  • 位运算与逻辑运算简介,用位运算表示逻辑运算
    目录一、什么是位运算1.1按位与,即&1.2按位或,即|1.3按位取反,即~1.4按位异或,即^二、什么是逻辑运算2.1逻辑与,即&&2.2逻辑或,即||2.3逻辑非,即!三、位运算与逻辑运算的区别四、用位运算表示逻辑运算4.1用位运算表示逻辑非“!”4.2用位运算表示逻辑与......
  • 对UVM添加超时前的打印信息+AXI低功耗接口+process的await语句+对象当成参数+sv的单例
    对UVM添加超时前的打印信息首先获取到UVM的超时值,然后手动设定\$time的比较和while延时循环,当超出时间后,打印特殊的debug信息。$time<set_time,则进行循环。uvm_cmdline_processorclp;clp=uvm_cmdline_processor::get_inst();stringtimeout_settings[$];stringtimeout......
  • 学生管理系统开发mainpage(python语言)
    主界面与其他界面切换的代码#开发者:a_blue_fat#日期:2023/11/22#时间:8:48importtkinterastk#fromviewimport*importviewclassMainPage:def__init__(self,master):self.root=masterself.root.geometry("800x400")se......
  • 01_nodejs_phantomjs_nodemailer
    代码块nodejs-phantomjs-nodemailer功能每天定时截图,并把截到的图片自动通过邮件发送。说明代码注释已经非常详细,就不多做说明,需要的朋友自己查看代码即可,主文件Mail.js,截图文件capturePart1.js,capturePart2.js,capturePart3.js,这里只展示了capturePart1.js其他两个类似。值得......
  • 硬件检测工具 AIDA64 Extreme 序列号
    AIDA64Extreme功能强悍,既可以快速并详细的查找你的设备信息,还可以对你的设备稳定性,内存及磁盘驱动器进行系统性的评估,并且兼容32及64位的windows操作系统。该版本已内置序列号,可以使用全部功能。使用说明:1、将压缩文件解压到某固定位置,不要随意移动。2、解压后,双击start_......
  • 【Azure Cloud Service】创建Azure云服务时遇见分配VM资源错误: VM(s) with the follo
    问题描述创建AzureCloudService资源,遇见资源操作完成时的终端预配状态为Failed的信息。创建失败,创建的错误日志截图如下: 详细的错误信息为:{"code":"DeploymentFailed","message":"Atleastoneresourcedeploymentoperationfailed.Pleaselistdeploymentoperati......
  • 选型4G-Cat.1模组Air780E,必须要说的注意事项!
    ​Air780E是合宙低功耗4G-Cat.1模组经典型号之一,累计出货数量2000万+,广泛应用于物联网各行业。在此,特别感谢各位大佬的信任与支持。写这篇文档的目的是什么呢?从用户的角度,解答大家对Air780E这款模组最关心的问题;不深入探究技术细节,更多从选型、应用等非技术维度展开。阅读本......
  • Error: Failed to download metadata for repo ‘update‘
    安装Rsync时报错:通常原因为从openEuler的官方仓库更新元数据时遇到超时或连接失败的问题。更换镜像源#移除旧的镜像源[[email protected]]#mv/etc/yum.repos.d/openEuler.repo/etc/yum.repos.d/openEuler.repo.bak#替换国产openEuler镜像源[root@nginx1yum......