【无标题】

作业题目: 位运算

完成下面任务(29 分)

密码系统有时间戳的需求,因此密码系统有实时钟芯⽚。假设实时钟鱿全局变量unsignted short TIME定义。

  1. 在 Ubuntu 活 openEuler 中完成任务(推荐openEuler)

  2. 16 位TIME 的含义

    TIME
    
    (bit15) +++++ ++++++ +++++(bit0)
    
    ||||| |||||| |||||
    
    ||||| |||||| +------- second/2
    
    ||||| +-------------- minute
    
    +-------------------- hour
    
  3. 使⽤位运算编写并调⽤下⾯函数 ,把当前时间(使⽤ C库函数获得)设置到 TIME 中,给出代码,使⽤ git

记录过程。(12 分)

void setHour(int h)

void setMinute(int m)

void setSecond(int s)
  1. 使⽤位运算编写并调⽤下⾯函数 ,读取TIME 中的时间,给出代码,使⽤ git 记录过程。(12 分)
void setHour(int h)

void setMinute(int m)

void setSecond(int s)
  1. 完成main.c测试模块,测试你完成的代码,给出代码,编译运⾏结果,使⽤ git 记录过程。(5ʼ)

获取系统时间设置TIME

读取你设置的结果

设置minute 为你学号最后两位

读取minute

作业提交要求 (1’)

  1. 记录实践过程和 AI 问答过程,尽量不要截图,给出⽂本内容

  2. (选做)推荐所有作业托管到 gitee或 github 上

  3. (必做)提交作业 markdown⽂档,命名为“学号-姓名-作业题⽬.md”

  4. (必做)提交作业 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记录过程

  1. 初始化git仓库
git init
  1. 添加文件
git add .
  1. 提交更改
git commit -m "Initial commit"
  1. 每次修改后,重复上述步骤

6. 编译和运行

在Ubuntu环境下,使用以下命令编译和运行代码:

gcc -o time_test main.c
./time_test

7. 记录git过程

每次修改后,使用以下命令记录更改:

git add .
git commit -m "Update code"

这样,你就完成了整个任务,并且使用git记录了开发过程。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值