二进制转换成十六进制、位运算、结构体

二进制转换成十六进制学习视频链接:第31集:二进制转换成十六进制_哔哩哔哩_bilibili

二进制、十进制、十六进制转换表

 8421码,以4位为一组,不够左补0

 结构体

学习视频链接:【洋桃电子】洋桃补习班(为0基础的初学者补足基础知识)STM32入门100步系列视频_哔哩哔哩_bilibilia

 枚举和结构体直接的区别

 C语言中的集合数据类型

 数组的局限性:数组里边只能包含一种类型的变量

定义结构体的方法

 结构体定义的关键字:

struct name { 类型 变量; }定义变量;

定义变量可以不设置
--------------------------------------------------------------------------------------
typedef struct { 类型 变量; }x;

此时的x一定要存在,它表示一种数据类型(结构体类型),可以用来定义其他变量

 结构体的使用方法 

用法一:

 

 用法二:

 在写入数据中,此时的x表示数据类型,用来定义 y 为结构体类型;调用也通过 y 来调用

结构体示例代码

#include<stdio.h>
#include<stdlib.h>
 
/*structure declare*/
struct str_func{
    int a;
    int b;
    int (*add)(int a, int b);
    int (*sub)(int a, int b);
    int (*compare)(int a, int b);
};
 
int add(int a, int b){
    return a+b;
}
 
int sub(int a, int b){
    return a - b;
}
 
int compare(int a, int b){
    if (a>b)
        return a;
    else 
        return b;
}
 
/*create a structure and init*/
struct str_func test = {
    .a = 5,
    .b = 7,
    .add = add,              //function pointer point to function
    .sub = sub,
    .compare = compare,
};
 
int main(){
    if (test.compare)
        printf("a b max = %d\n",(test.compare(test.a,test.b)));
    if (test.compare)
        printf("a add b = %d\n",(test.add(test.a,test.b)));
    if (test.compare)
        printf("a sub b = %d\n",(test.sub(test.a,test.b)));
    return 0;
}

结果展示

a b max = 7
a add b = 12
a sub b = -2

静态变量(static)

静态变量 类型说明符是static。


静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直 到整个程序运行结束(相反,而auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放)。静态变量虽在程序的整个执 行过程中始终存在,但是在它作用域之外不能使用。

详细解释参考:static静态变量的理解 - dzqabc - 博客园

extern变量

Extern的问题在于不知道这个关键词出现的时候到底是声明还是定义。

谨记:声明可以多次,定义只能一次。

函数的声明extern关键词是可有可无的,因为函数本身不加修饰的话就是extern的。但是引用的时候一样是需要声明的。

全局变量在外部使用声明时,extern关键词是必须的,如果变量无extern修饰且没有显式的初始化,同样成为变量的定义,因此此时必须加extern,而编译器在此标记存储空间在执行时加载如内存并初始化为0。

局部变量的声明不能有extern的修饰,且局部变量在运行时才在堆栈部分分配内存。

详细参考:extern使用方法总结!_CSDNwei的专栏-CSDN博客_extern用法

关键字const

Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。

详细参考:关于C++ const 的全面总结_亿言-CSDN博客_const

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个栈同时实现加减乘除和进制转换的 C 语言代码示例: ```c #include <stdio.h> #include <stdbool.h> #include <string.h> #include <ctype.h> #define STACK_SIZE 100 // 定义栈结构体 struct stack { int top; int data[STACK_SIZE]; }; // 初始化栈 void init_stack(struct stack *s) { s->top = -1; } // 判断栈是否为空 bool is_empty(struct stack *s) { return s->top == -1; } // 判断栈是否已满 bool is_full(struct stack *s) { return s->top == STACK_SIZE - 1; } // 入栈操作 void push(struct stack *s, int value) { if (is_full(s)) { printf("Stack Overflow\n"); return; } s->top++; s->data[s->top] = value; } // 出栈操作 int pop(struct stack *s) { if (is_empty(s)) { printf("Stack Underflow\n"); return -1; } int value = s->data[s->top]; s->top--; return value; } // 获取栈顶元素 int peek(struct stack *s) { if (is_empty(s)) { printf("Stack Underflow\n"); return -1; } return s->data[s->top]; } // 判断字符是否为数字 bool is_digit(char c) { return c >= '0' && c <= '9'; } // 将字符表示的数字转换为整数 int char_to_int(char c) { return c - '0'; } // 将整数转换为字符表示的数字 char int_to_char(int n) { return n + '0'; } // 计算加法 int add(int a, int b) { return a + b; } // 计算减法 int subtract(int a, int b) { return a - b; } // 计算乘法 int multiply(int a, int b) { return a * b; } // 计算除法 int divide(int a, int b) { return a / b; } // 进制转换 void convert(int n, int base) { struct stack s; init_stack(&s); while (n != 0) { int remainder = n % base; push(&s, remainder); n /= base; } while (!is_empty(&s)) { int digit = pop(&s); if (digit < 10) { printf("%c", int_to_char(digit)); } else { printf("%c", 'A' + digit - 10); } } } int main() { struct stack s; init_stack(&s); char input[STACK_SIZE]; printf("Enter expression: "); scanf("%s", input); int length = strlen(input); int i = 0; while (i < length) { char c = input[i]; if (is_digit(c)) { int value = char_to_int(c); push(&s, value); } else { int b = pop(&s); int a = pop(&s); switch (c) { case '+': push(&s, add(a, b)); break; case '-': push(&s, subtract(a, b)); break; case '*': push(&s, multiply(a, b)); break; case '/': push(&s, divide(a, b)); break; default: printf("Invalid operator\n"); return 1; } } i++; } int result = pop(&s); printf("Result: %d\n", result); printf("Binary: "); convert(result, 2); // 转换为二进制 printf("\nHexadecimal: "); convert(result, 16); // 转换为十六进制 printf("\n"); return 0; } ``` 该程序实现了一个简单的逆波兰表达式计算器,可以读入一个表达式并计算其结果,同时还可以将结果转换为二进制十六进制。在这个示例中,我们使用一个数组来表示栈的数据,同时使用一个整数变量来跟踪栈顶的位置。我们还定义了一些辅助函数来执行栈操作,以及一些函数来执行加减乘除运算和进制转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值