c基础语法-常用关键字
变量
在计算机中,整数是以补码形式存放的。所以如果整数的最高位是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基础语法-常用关键字的更多相关文章
- Java SE 基础:常用关键字
Java SE 基础:常用关键字 常用关键字表
- Java基础语法(1)-关键字与保留字
title: Java基础语法(1)-关键字与保留字 blog: CSDN data: Java学习路线及视频 1.关键字 关键字(keyword)的定义和特点 定义:被Java语言赋予了特殊含义,用 ...
- .bat学习-基础语法(常用)
一般来说,脚本或者语言都有相同地方 定义变量,输入,输出,判断条件等等.知道的相同之处,我们就可以借助强大的搜索引擎进行查找我们想要知道的东西. bat为批处理脚本BATCH.现在只知道是使用于win ...
- Java基础语法(一)---关键字、常量、变量、运算符
一.关键字 定义:被Java赋予了特殊含义的单词. 特点:体现上都是英文小写. 1. 用于定义数据类型的关键字 基本数据类型: 整数类型:byte short int long 浮点类型:f ...
- -1-1 java 基础语法 java关键字 java 注释 常量 语句 运算符 函数 数组定义
Java语言基础组成 关键字 标识符 注释 常量和变量 运算符 语句 函数 数组 关键字 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 用于定义数据类型的关键字 class ...
- python基础之常用关键字总结
前言 到python3.6为止,python内置的关键字有33个,比python2.7的版本多了2个.下面总结一下python3的关键字的使用. python内置关键字 解释器在加载上下文的时候,如果 ...
- java基础语法this关键字
未经允许,禁止转载!!!!!!!! this关键词在java里面很重要,想了解清楚this就必须对 类:对象:this:成员变量:方法:构造方法 都了解清楚. 一.使用this调用本类中的成员变量( ...
- JS基础语法---continue关键字
continue: 在循环中如果遇到continue关键字,直接开始下一次循环 如下:continue在计数器之前,会一直循环,浏览器会崩溃,我的就崩溃了 var i = 0; while (i &l ...
- JS基础语法---break关键字
break关键字: 如果在循环中使用,遇到了break,则立刻跳出当前所在的循环 for (var i = 0; i < 10; i++) { while (true ...
- java——基础语法
java基础语法 1.关键字:java赋予特殊含义的单词. 2.标识符:程序中开发人员自定义的名词,例如:类名,函数名,变量名(注意事项:①不能以阿拉伯数字开头②不能采用关键字). 3.常量:固定的数 ...
随机推荐
- sqlserver 循环插入脚本
Declare @i int = 0 -- 说明需要插入的列值 WHILE @i< 1000000 BEGIN -- 需要写入数据的值 insert into ... set @i = @i + ...
- c/c++ 2d矢量库
Cairo Cairo is a 2D graphics library with support for multiple output devices. Currently supported o ...
- Matplotlib 绘图线
绘图过程如果我们自定义线的样式,包括线的类型.颜色和大小等. 线的类型 线的类型可以使用 linestyle 参数来定义,简写为 ls. 类型 简写 说明 'solid' (默认) '-' 实线 'd ...
- c++中int转string
在muduo库中看见的一个函数,写的有点秀 const char digits[] = "9876543210123456789"; const char* zero = digi ...
- IO 多路复用 select/poll/epoll ---> Reactor ---> Netty
什么是内核态和用户态 https://blog.csdn.net/qq_41709234/article/details/124320482 参考:https://www.cnblogs.com/lo ...
- PHP面向对象(三)
对象的引用 代码如下: <?php//类的定义以关键字class开始,类的命名通常以每个单词第一个字母大写 class NbaPlayer{ public $name = & ...
- Win10中找回曾复制过的东西
按Win+V,如果弹出的"剪贴板历史"设置已经打开,那么就可以找回.建议大家打开这项设置以防万一.
- vue3使用echarts插件并实现点击下载图表功能
接到一个新的需求,就是用vue3制作一幅世界地图,并实现点击下载按钮将图表转变为图片下载到本地. 使用插件: html2canvasnpm安装: npm install html2canvas组件引入 ...
- Spring基本概述
Spring是一个开源框架,官方网站是http://spring.io/,Spring是2003年兴起的一个轻量级的Java开发框架,由lnterface21公司的JavaEE专家RodJohnson ...
- redis 缓存穿透和缓存击穿,缓存雪崩的原因及解决方案
缓存穿透 缓存穿透是指查询缓存中没有,数据库中也没有的数据 .从系统层面来看,请求像是穿透了缓存,直接访问数据库.这种情况会给系统带来潜在的风险,如果有大量的请求访问系统数据库中不存在的数据,会直接请 ...