变量

在计算机中,整数是以补码形式存放的。所以如果整数的最高位是1,有符号数的话就是负数;如果是无符号数,则都表示正数

整形 int ->32 -2^31~2^31
无符号整形 unsigned int ->32 2^31
volatile unsigned int

volatile 不稳定的,易变的,告诉编译器要谨慎处理
什么时候用 volatile,3种情况
1.中断服务函数的共享变量
2.多线程的共享变量
3.寄存器变量 (举例,传感器拿到数据更改寄存器的某一位)

相同点: 这三种情况 都属于 不属于main函数控制的范围

在程序设计中 使用 int short char
typedef unsigned int u32
typedef unsigned short u16
typedef unsigned char u8

一个c代码文件编译过程:
预处理,词法分析,语法分析,语义分析,编译为汇编,链接库文件
a.c/a.h->a.i->a.s->a.o

一个c在执行时包括什么?
代码段 .text
数据段 .data 被初始化的全局变量 volatile unsigned int b=1;
BSS(未初始化数据段) 没有被初始化的全局变量 unsigned int a;

关键字
static------extern
作用1 限定作用域
       作用域: 在一个.c中, 在一个函数中, 定义了static变量,不做初始化时,默认会自动初始化为0(数据放在数据段.data 的静态区)
作用2 在一个函数中定义static时,调用过程中其值不变
作用3 在模块中定义static时, 被定义者只能被本模块使用(类似于私有变量/函数)

#define 仅仅是字符串常量替换,数据类型跟平台相关
const 只读, 能指定数据类型

#define PI 3.141592653 (数据类型不明确,需要看平台)
const float PI=3.141592653 (精确指定用float类型)

typedef 类型 别名
typedef struct Student{
int age;
char name;
}Stu;
struct Student stu1;
Stu stu1;

位运算:
& 按位与
| 按位或
! 按位取反
^ 按位异或 如果两个相应bit位相同,则结果为0,否则为1

<<(左移)
运算规则: 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
数学意义: 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次,左移n位就相当于乘以2的n次方。

>>(带符号右移)
运算规则: 按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。
数学意义: 右移一位相当于除2,右移n位相当于除以2的n次方。取商,余数不要。

掩码MASK
掩码的作用 提取某一位
掩码的生成 掩码= 1<<提取的位数

寄存器编程的三个手段
1.置1 flag|=MASK flag|=(1<<(想要操作的位数))
2.清0 flag&=~MASK flag&=~(1<<(想要操作的位数))
3.转置 flag^=MASK flag^=(1<<(想要操作的位数))

数组
int a[容量]
数组名 (const) 是个固定地址 (不能自加 不能赋值)

int a[32];
int* pa;
pa=a;
pa++;

函数
函数的调用就是把函数的定义地址放入pc指针寄存器

结构体
结构体指针访问成员用->,结构体访问成员用.
寄存器封装(注意:每个寄存器位数对齐操作)

typedef volatile unsigned int VU32;
typedef struct _T_Xxx_Config{
  union{
    struct{
      VU32 enable_start :1;
      VU32 read_start :1;
      VU32 stdbm :1;
      ...
    }bits;
    VU32 INIT;
  }adccon;
}T_Xxx_Config;
typedef T_Xxx_Config * p_XxxRegs;
p_XxxRegs p_XxxReg;

p_XxxReg->adccon.bits.enable_start=1;
p_XxxReg->adccon.bits.read_start=1;

参考:

结构体: https://www.elecfans.com/d/1433999.html
epoll: https://blog.csdn.net/armlinuxww/article/details/92803381

c基础语法-常用关键字的更多相关文章

  1. Java SE 基础:常用关键字

    Java SE 基础:常用关键字 常用关键字表

  2. Java基础语法(1)-关键字与保留字

    title: Java基础语法(1)-关键字与保留字 blog: CSDN data: Java学习路线及视频 1.关键字 关键字(keyword)的定义和特点 定义:被Java语言赋予了特殊含义,用 ...

  3. .bat学习-基础语法(常用)

    一般来说,脚本或者语言都有相同地方 定义变量,输入,输出,判断条件等等.知道的相同之处,我们就可以借助强大的搜索引擎进行查找我们想要知道的东西. bat为批处理脚本BATCH.现在只知道是使用于win ...

  4. Java基础语法(一)---关键字、常量、变量、运算符

    一.关键字 定义:被Java赋予了特殊含义的单词. 特点:体现上都是英文小写. 1. 用于定义数据类型的关键字 基本数据类型: 整数类型:byte  short  int  long   浮点类型:f ...

  5. -1-1 java 基础语法 java关键字 java 注释 常量 语句 运算符 函数 数组定义

    Java语言基础组成 关键字 标识符 注释 常量和变量 运算符 语句 函数 数组 关键字 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 用于定义数据类型的关键字 class ...

  6. python基础之常用关键字总结

    前言 到python3.6为止,python内置的关键字有33个,比python2.7的版本多了2个.下面总结一下python3的关键字的使用. python内置关键字 解释器在加载上下文的时候,如果 ...

  7. java基础语法this关键字

    未经允许,禁止转载!!!!!!!! this关键词在java里面很重要,想了解清楚this就必须对  类:对象:this:成员变量:方法:构造方法 都了解清楚. 一.使用this调用本类中的成员变量( ...

  8. JS基础语法---continue关键字

    continue: 在循环中如果遇到continue关键字,直接开始下一次循环 如下:continue在计数器之前,会一直循环,浏览器会崩溃,我的就崩溃了 var i = 0; while (i &l ...

  9. JS基础语法---break关键字

    break关键字: 如果在循环中使用,遇到了break,则立刻跳出当前所在的循环       for (var i = 0; i < 10; i++) {         while (true ...

  10. java——基础语法

    java基础语法 1.关键字:java赋予特殊含义的单词. 2.标识符:程序中开发人员自定义的名词,例如:类名,函数名,变量名(注意事项:①不能以阿拉伯数字开头②不能采用关键字). 3.常量:固定的数 ...

随机推荐

  1. InputManager

    inputManger配置参数说明 https://www.cnblogs.com/xiaoyulong/p/10011256.html 配置方法 https://www.cnblogs.com/td ...

  2. EF Core自动将实体映射到数据库

    protected override void OnModelCreating(ModelBuilder modelBuilder) { try { var compilationLibrary = ...

  3. http 协议( 简单了解 )

    HTTP 请求协议 超文本传输协议,是一种用于分布式写作式和媒体信息系统的应用层协议. HTTP是万维网的数据通信的基础. HTTP协议概述 HTTP是一个客户端终端 (用户) 和服务器端 ( 网端) ...

  4. html音乐播放器

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. 17.SpringCloud Alibaba-OSS

    开通阿里云OSS https://www.aliyun.com/product/oss?spm=5176.19720258.J_3207526240.32.e93976f4xq6CZt 创建Bucke ...

  6. 洛谷P2205 [USACO13JAN]Painting the Fence S

    题目 https://www.luogu.com.cn/problem/P2205 思路 刷水题真解压 差分就完事了 值得注意的一些东西:像这种和数轴或者坐标相关的题,还有扫描线题,一定要注意区间的开 ...

  7. Google Earth Engine——基于改进的RSEI评估生态环境(水体掩膜后)

    未经允许,禁止随意转载,尊重他人版权,仅供学习参考,欢迎交流. 背景介绍 遥感生态指数(Remote Sensing Ecological Index)的获得,是使用主成分分析法耦合了绿度.湿度.干度 ...

  8. Matplotlib 网格线

    我们可以使用 pyplot 中的 grid() 方法来设置图表中的网格线. grid() 方法语法格式如下: matplotlib.pyplot.grid(b=None, which='major', ...

  9. golang json字符串合并操作

    用于两个json格式的字符串合并,当B向A合并时,共有的字段,将用B字段的值(伴随类型一起覆盖),非共有的,A的字段保留,B的字段新增. example代码: package main import ...

  10. C++实现顺序栈相关操作代码

    #include<iostream>#include<cstdlib>using namespace std;#define MAXSIZE 100#define OK 1#d ...