作业题目: 位运算
完成下面任务(29 分)
密码系统有时间戳的需求,因此密码系统有实时钟芯⽚。假设实时钟鱿全局变量unsignted short TIME定义。
-
在 Ubuntu 活 openEuler 中完成任务(推荐openEuler)
-
16 位TIME 的含义
TIME (bit15) +++++ ++++++ +++++(bit0) ||||| |||||| ||||| ||||| |||||| +------- second/2 ||||| +-------------- minute +-------------------- hour
-
使⽤位运算编写并调⽤下⾯函数 ,把当前时间(使⽤ C库函数获得)设置到 TIME 中,给出代码,使⽤ git
记录过程。(12 分)
void setHour(int h)
void setMinute(int m)
void setSecond(int s)
- 使⽤位运算编写并调⽤下⾯函数 ,读取TIME 中的时间,给出代码,使⽤ git 记录过程。(12 分)
void setHour(int h)
void setMinute(int m)
void setSecond(int s)
- 完成main.c测试模块,测试你完成的代码,给出代码,编译运⾏结果,使⽤ git 记录过程。(5ʼ)
获取系统时间设置TIME
读取你设置的结果
设置minute 为你学号最后两位
读取minute
作业提交要求 (1’)
-
记录实践过程和 AI 问答过程,尽量不要截图,给出⽂本内容
-
(选做)推荐所有作业托管到 gitee或 github 上
-
(必做)提交作业 markdown⽂档,命名为“学号-姓名-作业题⽬.md”
-
(必做)提交作业 markdown⽂档转成的 PDF ⽂件,命名为“学号-姓名-作业题⽬.pdf”
作业步骤如下
首先创建作业路径,具体如下:
lwy@lwy-virtual-machine:~/classTest/test1008/timu2S
创建main.c文件用来存放代码
nano main.c
1. 定义TIME变量
进入main.c文件后,进行代码编写。首先,我们需要定义TIME
变量,它是一个16位的无符号短整型(unsigned short
)。
#include <stdio.h>
#include <time.h>
unsigned short TIME;
2. 编写设置时间的函数
接着需要编写三个函数,分别用于设置小时、分钟和秒。
void setHour(int h) {
TIME = (TIME & 0x01FF) | (h << 11);
}
void setMinute(int m) {
TIME = (TIME & 0xFE01) | (m << 5);
}
void setSecond(int s) {
TIME = (TIME & 0xFFE0) | s;
}
保存退出后,使用git记录过程
1.初始化git仓库
git init
2.添加文件
git add .
3.提交更改
git commit -m "settime"
4.查看提交历史
20221327@20221327-virtual-machine:~/classTest/test1008/timu2$ git log
commit 25cc5b36411d5bfef94ac57d3397276338b0904d(HEAD -> master)
Author:lzj2022127 <3073696813@qq.com>
Date: Tue oct 8 18:58:17 2024 +0800
settime
3. 编写读取时间的函数
我们需要编写三个函数,分别用于读取小时、分钟和秒。
int getHour() {
return (TIME >> 11) & 0x1F;
}
int getMinute() {
return (TIME >> 5) & 0x3F;
}
int getSecond() {
return TIME & 0x1F;
}
接下来重复上面的四个步骤:
20221327@20221327-virtual-machine:~/classTest/test1008/timu2$ nano main.c
20221327@20221327-virtual-machine:~/classTest/test1008/timu2$ git add .
20221327@20221327-virtual-machine:/classTest/test1008/timu2$ git commit -m "gettime"
[master d175a01] gettime
1 file changed, 13 insertions(+)
20221327@20221327-virtual-machine:~/classTest/test1008/timu2$ git log
commit d175a01f45c0b53127f2311a6058335e271c6877 (HEAD -> master)
Author: lzj2022127 <3073696813@qq.com>
Date: Tue oct 8 19:04:56 2024 +0800
gettime
commit 25cc5b36411d5bfef94ac57d3397276338b0904d
Author: lzj2022127 <3073696813@qq.com>
Date:Tue Oct 8 18:58:17 2024 +0800
settime
4. 编写main.c测试模块
编写一个测试模块来测试我们完成的代码。
#include <stdio.h>
#include <time.h>
unsigned short TIME;
void setHour(int h) {
TIME = (TIME & 0x01FF) | (h << 11);
}
void setMinute(int m) {
TIME = (TIME & 0xFE01) | (m << 5);
}
void setSecond(int s) {
TIME = (TIME & 0xFFE0) | s;
}
int getHour() {
return (TIME >> 11) & 0x1F;
}
int getMinute() {
return (TIME >> 5) & 0x3F;
}
int getSecond() {
return TIME & 0x1F;
}
int main() {
time_t now;
struct tm *tm_info;
time(&now);
tm_info = localtime(&now);
int hour = tm_info->tm_hour;
int minute = tm_info->tm_min;
int second = tm_info->tm_sec;
setHour(hour);
setMinute(minute);
setSecond(second);
printf("Current time: %02d:%02d:%02d\n", getHour(), getMinute(), getSecond());
// 设置分钟为你学号最后两位
int student_number = 25; // 假设学号最后两位是25
setMinute(student_number);
printf("Updated time: %02d:%02d:%02d\n", getHour(), getMinute(), getSecond());
return 0;
}
同样,重复上面的四个步骤:
20221327@20221327-virtual-machine:~/classTest/test1008/timu2$ nano main.c
20221327@20221327-virtual-machine:~/classTest/test1008/timu2$ git add .
20221327@20221327-virtual-machine:/classTest/test1008/timu2$ git commit -m "getmain"
[master cbb29fb] getmain
1 file changed, 24 insertions(+)
20221327@20221327-virtual-machine:~/classTest/test1008/timu2$ git log
commit cbb29fbc4c0fd802ce716ce26e98d8c7daf95d0f (HEAD -> master)
Author: lzj2022127 <3073696813@qq.com>
Date: Tue Oct 8 19:30:54 2024 +0800
getmain
commit d175a01f45c0b53127f2311a6058335e271c6877
Author: lzj2022127 <3073696813@qq.com>
Date: Tue Oct 8 19:04:56 2024 +0800
gettime
commit 25cc5b36411d5bfef94ac57d3397276338b0904d
Author: lzj2022127 <3073696813@qq.com>
Date: Tue Oct 8 18:58:17 2024 +0800
settime
5. 编译运行main.c
我的学号是1327,设置的minute是03
20221327@20221327-virtual-machine:~/classTest/test1008/timu2$ gcc -o time_test main.c
20221327@20221327-virtual-machine:~/classTest/test1008/timu2$ ./time_test
Current time: 20:05:13
Updated time: 20:03:01
20221327@20221327-virtual-machine:~/classTest/test1008/timu2$ git add .
20221327@20221327-virtual-machine:~/classTest/test1008/timu2$ git commit -m "run"
[master e6467db] run
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100755 time_test
20221327@20221327-virtual-machine:~/classTest/test1008/timu2$ git log
commit e6467db5013da5c39b04ddc39146a4c9122678eb (HEAD -> master)
Author: lzj2022127 <3073696813@qq.com>
Date: Tue Oct 8 20:06:20 2024 +0800
run
commit cbb29fbc4c0fd802ce716ce26e98d8c7daf95d0f
Author: lzj2022127 <3073696813@qq.com>
Date: Tue Oct 8 19:30:54 2024 +0800
getmain
commit d175a01f45c0b53127f2311a6058335e271c6877
Author: lzj2022127 <3073696813@qq.com>
Date: Tue Oct 8 19:04:56 2024 +0800
gettime
commit 25cc5b36411d5bfef94ac57d3397276338b0904d
Author: lzj2022127 <3073696813@qq.com>
Date: Tue Oct 8 18:58:17 2024 +0800
settime
附:AI问答过程
问:
在Ubuntu环境下完成下面的任务
答:
好的,让我们一步步完成这个任务。我们将使用C语言编写代码,并使用git来记录我们的开发过程。
1. 定义TIME变量
首先,我们需要定义TIME
变量,它是一个16位的无符号短整型(unsigned short
)。
#include <stdio.h>
#include <time.h>
unsigned short TIME;
2. 编写设置时间的函数
我们需要编写三个函数,分别用于设置小时、分钟和秒。
void setHour(int h) {
TIME = (TIME & 0x01FF) | (h << 11);
}
void setMinute(int m) {
TIME = (TIME & 0xFE01) | (m << 5);
}
void setSecond(int s) {
TIME = (TIME & 0xFFE0) | s;
}
3. 编写读取时间的函数
我们需要编写三个函数,分别用于读取小时、分钟和秒。
int getHour() {
return (TIME >> 11) & 0x1F;
}
int getMinute() {
return (TIME >> 5) & 0x3F;
}
int getSecond() {
return TIME & 0x1F;
}
4. 编写main.c测试模块
我们需要编写一个测试模块来测试我们完成的代码。
#include <stdio.h>
#include <time.h>
unsigned short TIME;
void setHour(int h) {
TIME = (TIME & 0x01FF) | (h << 11);
}
void setMinute(int m) {
TIME = (TIME & 0xFE01) | (m << 5);
}
void setSecond(int s) {
TIME = (TIME & 0xFFE0) | s;
}
int getHour() {
return (TIME >> 11) & 0x1F;
}
int getMinute() {
return (TIME >> 5) & 0x3F;
}
int getSecond() {
return TIME & 0x1F;
}
int main() {
time_t now;
struct tm *tm_info;
time(&now);
tm_info = localtime(&now);
int hour = tm_info->tm_hour;
int minute = tm_info->tm_min;
int second = tm_info->tm_sec;
setHour(hour);
setMinute(minute);
setSecond(second);
printf("Current time: %02d:%02d:%02d\n", getHour(), getMinute(), getSecond());
// 设置分钟为你学号最后两位
int student_number = 25; // 假设学号最后两位是25
setMinute(student_number);
printf("Updated time: %02d:%02d:%02d\n", getHour(), getMinute(), getSecond());
return 0;
}
5. 使用git记录过程
- 初始化git仓库
git init
- 添加文件
git add .
- 提交更改
git commit -m "Initial commit"
- 每次修改后,重复上述步骤
6. 编译和运行
在Ubuntu环境下,使用以下命令编译和运行代码:
gcc -o time_test main.c
./time_test
7. 记录git过程
每次修改后,使用以下命令记录更改:
git add .
git commit -m "Update code"
这样,你就完成了整个任务,并且使用git记录了开发过程。