首页 > 其他分享 >位运算

位运算

时间:2024-08-16 23:27:25浏览次数:12  
标签:运算 void printf MASK FontInfo attributes font

//设计一位字段结构存储下面信息。
字体ID:0~255之间的一个数
字体大小:0~127之间的一个数
对齐:0~2之间的一个数表示左对齐,居中,右对齐
加粗:开(1)或闭(0)
斜体:开(1)或闭(0)
在程序中使用该结构来打印字体参数,并使用循环菜单来让用户改变参数。例如,该程序的一个运行示例如下:
ID SIZE ALIGNMENT B I U
1 12 left off off off
f)change font s)change size a)change alignment
b)toggle bold i)toggle italic u)toggle underline
q)quit/, 该程序要用按位运算管理信息
/

#include <stdio.h>
typedef struct
{
    unsigned char fontID;     // 字体ID (0-255)
    unsigned char fontSize;   // 字体大小 (0-127)
    unsigned char alignment;  // 对齐 (0-2)
    unsigned char attributes; // 属性 (按位存储加粗、斜体、下划线)
} FontInfo;

// 属性位定义
#define BOLD_MASK 0x01      // 第0位:加粗
#define ITALIC_MASK 0x02    // 第1位:斜体
#define UNDERLINE_MASK 0x04 // 第2位:下划线

void printFontInfo(const FontInfo *font)
{
    const char *alignments[] = {"left", "center", "right"};
    printf("%d %d %s %s %s\n",
           font->fontID,
           font->fontSize,
           alignments[font->alignment],
           (font->attributes & BOLD_MASK) ? "on" : "off",
           (font->attributes & ITALIC_MASK) ? "on" : "off",
           (font->attributes & UNDERLINE_MASK) ? "on" : "off");
}

void changeFont(FontInfo *font)
{
    printf("Enter new font ID (0-255): ");
    scanf("%hhu", &font->fontID);
}
void changeSize(FontInfo *font)
{
    printf("Enter new font size (0-127): ");
    scanf("%hhu", &font->fontSize);
}
void changeAlignment(FontInfo *font)
{
    printf("Enter new alignment (0-left, 1-center, 2-right): ");
    scanf("%hhu", &font->alignment);
}
void toggleBold(FontInfo *font)
{
    font->attributes ^= BOLD_MASK; 
}
void toggleItalic(FontInfo *font)
{
    font->attributes ^= ITALIC_MASK; 
}
void toggleUnderline(FontInfo *font)
{
    font->attributes ^= UNDERLINE_MASK; 
}
int main()
{
    FontInfo font = {1, 12, 0, 0}; 
    char choice;

    while (1)
    {
        printf("\nCurrent Font Info:\n");
        printFontInfo(&font);
        printf("f) change font s) change size a) change alignment\n");
        printf("b) toggle bold i) toggle italic u) toggle underline\n");
        printf("q) quit\n");
        printf("Choose an option: ");
        scanf(" %c", &choice);
        switch (choice)
        {
        case 'f':
            changeFont(&font);
            break;
        case 's':
            changeSize(&font);
            break;
        case 'a':
            changeAlignment(&font);
            break;
        case 'b':
            toggleBold(&font);
            break;
        case 'i':
            toggleItalic(&font);
            break;
        case 'u':
            toggleUnderline(&font);
            break;
        case 'q':
            return 0;
        default:
            printf("Invalid choice. Please try again.\n");
        }
    }
    return 0;
}

标签:运算,void,printf,MASK,FontInfo,attributes,font
From: https://www.cnblogs.com/yesiming/p/18363831

相关文章

  • python判断语句之if语句、比较和逻辑运算符、if...else...语句、if...elif...else语句
    文章目录1.介绍1.1顺序语句1.2判断语句1.3循环语句2.if语句的基本格式2.1判断语句介绍2.2程序中的判断2.3if语句的基本格式3.比较和逻辑运算符3.1比较运算符3.2逻辑运算符4.if...else...语句4.1if...else...的语法格式4.2实例5.if...elif...else...语......
  • 有符号浮点运算的基本步骤:以双线性插值为例
    参考:韩彬的图像处理书、无双软件学院方法。步骤一:无损定点化浮点数在硬件计算中首先需要做的便是定点化,一般是左移一定位宽,可以是2048或4096;这个过程要注意保障无损;步骤二:运算和位宽匹配;要确定所有参与计算的数小数位位宽是匹配的,否则无法进行任何层次的计算;需要特别注意很......
  • 高精度运算——大数加法与乘法
    要点:加法直接传递进位,乘法先保留进位,后统一处理使用int数组存储,空间浪费,处理方便建立bigNum结构(或类),处理清晰方便代码:基础定义#include<bits/stdc++.h>usingnamespacestd;charnum1[10000];charnum2[10000];structbigNum{ intnum[1000]={}; intlen;};vo......
  • 运算符
    +,-,*,/,%,++,--,+=,-=,*=,/=,a>b?c:d;类型转换隐式转换:小转大,short,char>>int>>long>>longlong>>float>>double,short和char运算时会转换成int类型强制转换:字符相加根据Ascii字码表++,--单独加在变量前后没有区别Windows系统中前缀优先于后缀,mac和Linux系统中前缀同等于后缀+=,-=,*=,/=,%=性质相......
  • x264 编码器像素运算系列:satd 函数
    x264编码器中像素运算在x264编码器中有多种像素间的运算,如下:sad计算:SAD(SumofAbsoluteDifferences,绝对差值和)是一种在图像处理和视频编码中常用的度量,用于计算两个图像块之间的差异。SAD值越小,表示两个图像块越相似。hadamard_ac计算:用于计算Hadamard变换后非零......
  • C语言学习-- 运算符
    提示:在C语言编程中,算术、关系和逻辑运算符是基础且不可或缺的工具。目录前言5.1算术运算符5.1.1介绍5.1.2算术运算符一览5.1.3案例演示5.1.4细节说明5.1.5自增,自减课堂练习15.1.6课堂练习25.2关系运算符(比较运算符)5.2.1介绍5.2.2关系运算符一览5.2.3案例......
  • java中运算符的详细知识点
    算数运算符a++先赋值再加1++a先加1在赋值--的道理是一样的赋值运算符1.=+=-=*=/=%=当=两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则支持连续赋值=+=-=*=/=%=不会改变基础类型测试一下:比较运算符运算结果为布尔类型==!=适......
  • 运算符结束
    运算符逻辑运算packageoperator;//逻辑运算符publicclassDemo05{publicstaticvoidmain(String[]args){//与或非booleana=true;booleanb=false;System.out.println("a&&b"+(a&&b));//逻辑与运算:有假为......
  • 查缺补漏——位运算
    编码方式原码:第一位是符号位,后面是数字位。符号位\(0\)为正数,\(1\)位负数liketihs:\(10000010\),这里表示的十进制数字就是\(-2\),第一位\(1\)是符号位。反码:分两种情况:1.正数的反码就等于正数的原码。2.负数的反码就等雨负数的原码除了符号位,其余的位按位取反。lik......
  • C++赋值运算符
    赋值运算符 = 用于将一个值赋给一个变量。对于自定义类型,如类和结构体,你可以重载赋值运算符以定义如何将一个对象的值赋给另一个对象。默认赋值运算符对于类类型,默认的赋值运算符会执行成员逐一赋值(member-wisecopy)。这意味着对于两个对象a和b,表达式a=b;将每个成员从b复制......