首页 > 其他分享 >位运算

位运算

时间:2024-10-08 11:35:16浏览次数:1  
标签:59 运算 hour int second TIME minute

20221409童诗嘉git仓库:https://gitee.com/tong-shijia20221409/network-programming/blob/master/exam2.c

1. 16 位TIME 的含义

TIME
(bit15) +++++ ++++++ +++++(bit0)
||||| |||||| |||||
||||| |||||| +------- second/2
||||| +-------------- minute
+-------------------- hour
含义:小时 (Hour): 占据最低的5位(bit 4 到 bit 0)。通常表示为0到23,表示一天中的小时数。

分钟 (Minute): 占据接下来的5位(bit 9 到 bit 5)。通常表示为0到59,表示小时中的分钟数。

秒/2 (Second/2): 占据最高的6位(bit 15 到 bit 10)。这里的“秒/2”意味着实际的秒数是这些位表示的值的两倍。

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

git网址:https://gitee.com/tong-shijia20221409/network-programming/tree/master
代码呈现:

#include <stdio.h>
#include <time.h>

// 定义TIME变量,初始值为0
unsigned int TIME = 0x0000;

// 设置小时
void setHour(int h) {
    TIME = (TIME & 0x003F) | (h << 11);  // 将小时左移11位
}

// 设置分钟
void setMinute(int m) {
    TIME = (TIME & 0xFC0F) | (m << 5);  // 将分钟左移5位
}

// 设置秒
void setSecond(int s) {
    TIME = (TIME & 0xFFE0) | s;  // 秒不需要移位
}

// 获取当前时间并设置到TIME中
void setCurrentTimeToTIME() {
    time_t rawtime;
    struct tm * timeinfo;

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

    int hour = timeinfo->tm_hour;
    int minute = timeinfo->tm_min;
    int second = timeinfo->tm_sec;

    // 确保小时在0-23之间
    if (hour > 23) hour = 23;
    // 确保分钟在0-59之间
    if (minute > 59) minute = 59;
    // 确保秒在0-59之间
    if (second > 59) second = 59;

    setHour(hour);
    setMinute(minute);
    setSecond(second);
}

int main() {
    setCurrentTimeToTIME();
    // 提取小时、分钟和秒
    int hour = (TIME >> 11) & 0x1F;
    int minute = (TIME >> 5) & 0x3F;
    int second = TIME & 0x1F;

    printf("TIME: %02d:%02d:%02d\n", hour, minute, second);
    return 0;
}

运行结果:TIME: 11:33:26

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

#include <stdio.h>

// 定义TIME变量,初始值为0
unsigned int TIME = 0x0000;

// 设置小时
void setHour(int h) {
    TIME = (TIME & 0x3FFF) | (h << 10);  // 确保小时在0-23之间,使用5位
}

// 设置分钟
void setMinute(int m) {
    TIME = (TIME & 0xC0FF) | (m << 5);  // 确保分钟在0-59之间,使用6位
}

// 设置秒
void setSecond(int s) {
    TIME = (TIME & 0xFFE0) | (s & 0x3F);  // 确保秒在0-59之间,使用6位
}

int main() {
    // 直接设置TIME为14:09:09
    int hour = 14;
    int minute = 9;
    int second = 9;

    setHour(hour);
    setMinute(minute);
    setSecond(second);

    // 读取并打印TIME变量
    int readHour = (TIME >> 10) & 0x1F;  // 使用5位存储小时
    int readMinute = (TIME >> 5) & 0x3F;  // 使用6位存储分钟
    int readSecond = TIME & 0x3F;  // 使用6位存储秒

    printf("TIME: %02d:%02d:%02d\n", readHour, readMinute, readSecond);
    return 0;
}

运行结果:TIME: 00:09:41
我的学号是20221409

标签:59,运算,hour,int,second,TIME,minute
From: https://www.cnblogs.com/tong-shijia20221409/p/18451343

相关文章

  • 例说提速运算中的小技巧 | 算理研究
    前情概要本博文是从例说提高运算的速度+准确度中分离处理单独成篇.技巧总结✍️遇到含有指数式的分式型函数判断奇偶性时,乘法比除法快;引例1,比如判断\(f(x)=\cfrac{2^x-1}{2^x+1}\)的奇偶性,分析:定义域为\(R\),关于原点对称,且有\(f(-x)\)\(=\)\(\cfrac{2^{-x}-1}{2^{-x}+1......
  • Java - 3 运算符
    Java-3运算符算术运算符/*++a:先运算后取值a++:先取值后运算*/inti=1;i=i++;//(1)temp=i;(2)i=i+1;(3)i=temp;System.out.println(i);//1inti=1;i=++i;//(1)i=i+1;(2)temp=i;(3)i=temp;System.out.println(i);//2System.out.prin......
  • Day09——运算符
    基本运算符运算符Java语言支持如下运算符:(重点掌握前4个)算术运算符:+、-、*、/、%、++;--赋值运算符:=关系运算符:>、<、>=、<=、==、!=、instanceof(稍后再讲)逻辑运算符:&&、||、!位运算符:&、|、^、~、>>、<<、>>>;(了解)条件运算符:?:扩展赋值运算符:+=、-=......
  • ES6中扩展运算符...与Set结合使用
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title><......
  • 信息学奥赛复赛复习12-CSP-J2021-01分糖果-模运算、余数、打擂台求最值、最大值、最小
    PDF文档公众号回复关键字:202410051P7909[CSP-J2021]分糖果[题目描述]红太阳幼儿园有n个小朋友,你是其中之一。保证n≥2有一天你在幼儿园的后花园里发现无穷多颗糖果,你打算拿一些糖果回去分给幼儿园的小朋友们由于你只是个平平无奇的幼儿园小朋友,所以你的体力有限,至......
  • 信息学奥赛复赛复习09-CSP-J2020-03表达式求值前置知识点-中缀表达式求值、摸运算、模
    PDF文档公众号回复关键字:20241002**1P1981[NOIP2013普及组]表达式求值**[题目描述]给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值[输入格式]一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“×”,且没有括号,所有参与运......
  • 实验一 C语言开发环境使用和数据类型,运算符,表达式
    #include<stdio.h>intmain(){printf("0\n");printf("<H>\n");printf("II\n");printf("0\n");printf("<H>\n");printf("II\n");return0;......
  • C++中指针和数组相关的运算符优先级
    概述本文深入介绍了与指针和数组相关的运算符优先级,利用代码示例展示了当左结合和右结合运算符同时存在时的结合方式,同时也演示了如何使用()来强制人为指定结合顺序。指针、数组相关的运算符优先级下表展示了相关运算符的优先级,有4个级别,同级别内的运算符按照结合性依次调用。......
  • 关于出四则运算题的进阶可视化解答
    `importjavax.swing.;importjavax.swing.border.TitledBorder;importjava.awt.;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.HashSet;importjava.util.Random;importjava.util.Scanner;classQuizFrameextendsJ......
  • JavaSE——进制转换、原码、反码、补码、位运算(左移、右移、取反)
    目录一、四种进制介绍二、进制的转换 (一)二进制—>十进制(二)八进制—>十进制(三)十六进制—>十进制(四)十进制—>二进制(五)十进制—>八进制(六)十进制—>十六进制(七)二进制—>八进制(八)二进制—>十六进制(九)八进制—>二进制(十)十六进制—>二进制三、原码......