【从零开始的嵌入式生活】必备基础知识2——数据类型、常量、变量及运算符

请添加图片描述

前言

今天是一天一更的第一天
希望大家可以跟着我一起学习,一起加油!
三连即可提高学习效率0.0

🧑🏻作者简介:一个学嵌入式的年轻人
✨联系方式:2201891280(QQ)
📔源码地址:https://gitee.com/xingleigao/study_qianrushi
全文大约阅读时间: 60min



1.数据类型

1.1数据类型分类

请添加图片描述


1.2基本数据类型

类型解释
逻辑类型只有两个true和false,表示逻辑真和假。0为假,其他都为真
整数类型包含char 、short、int和long long。char是有符号数字!!
浮点类型包含float和double
void类型主要用于指针和不返回值的函数

bool类型
需要包含<stdbool.h>头文件才可以使用,并不是基本数据类型

if(-1)	x = 12;
else	x = 18;

上面的结果就是12.因为-1非零数据!

char类型

类型名称长度值域
char1-128~127
unsigned char10~255

其实如果观察仔细的话ASCII码只有0~127的部分有数据,并未使用负数的值
short类型

类型名称长度值域
short2-32768~32767 大概是-3x104 ~ 3x104
unsigned short20~65535

int类型

类型名称长度值域
int4-(231) ~ 231-1 大概是-2x109~2x109
unsigned int40~4294967295

long long类型

类型名称长度值域
int8-(263) ~ 263-1 大概是-4x1018~4x1018
unsigned int80~(2^64-1)

long类型因为不同服务器长度不同,建议不使用v.v
浮点类型

类型名称长度值域
flat4-2128 ~ 2128(精度6~7位)
double8-21024~ +21024(精度15~16位)

1.3强制类型转换

(新类型名)变量名就完成了强制类型的转换
这种是一种不安全的转换方式
偶尔可能会产生不可预料的计算结果,所以建议少用


更多资料可以参阅我另外一篇文章《算法笔记知识点记录》第二章——快速入门1[数据类型和顺序结构]

2.常量

2.1整形常量

进制表示方式
八进制06434
十六进制0xd1c
十进制12344

注意一个点就是默认的整形常量是int,如果需要变成long long可以使用12345LL的形式。


2.2浮点常量

浮点常量也称为实数,其实就是含有小数部分。

3.5-12.53.1415926
C语言主要用十进制表示小数!


2.3指数常量

其实就是科学计数法

1.76e+10表示的就是1.176x10^10^-3.5123e-8表示的是3.5123x10^-8^
比较常用的一个 1e-8用于浮点数的比较
可以参考《算法笔记知识点记录》第二章——快速入门4[结构体、输入输出、复杂度和黑盒测试]


2.4字符常量

指的是一个单一字符,表现形式是由两个单引号包括的一个字符。

'a'、'A'、'Q'、'0'都是字符常量,其实就是一个对应的数字。
在这里插入图片描述
如果man ASCII之后,可以看到都是一个确定的值
需要注意以下几个点:

  • 小写字母比对应的大写字母大32,也就是’ '(空格)
  • 数字 小写字母、大写字母都是连续的

2.5字符串常量

字符串以\0结尾,用""来表示
”9“'9'、'0'本质上来说是相同的。


2.6标识常量

#define <标识常量名称> <常量>

举个例子

#define   MAX    50
#define   PI       3.1415926
#define   NULL    0
#define   EOF     -1
#define   ERROR   -1

就是一些常见的错误定义可以方便我们批量更改。
利用宏定义也可以定义函数:

#define MAX(a, b) ( (a) > (b) ? (a) : (b) )

上面的就可以返回对应的较大的数字,如果要这么玩,一定要注意把所有能加的括号都加上,否则展开的时候会因为运算符号的次序问题出问题!!!

3.变量

3.1变量基础

  • 变量名由字母、数字、下划线组成,不能以数字开头,不能和C的关键字重名。
  • 在程序运行时,变量占据存储空间的大小由其数据类型决定。
  • 变量在内存空间中的首地址,称为变量的地址。

3.2变量说明

使用时,我们需要声明它们的存储类型和数据类型
一般形式:<存储类型> <数据类型 > <变量名> ;

  • <存储类型> 关键字是auto、register、static和extern默认的是auto
  • <数据类型> 基本数据类型,也可以是自定义数据类型

3.3存储类型

auto 默认的存储类型
auto说明的变量只能在某个程序范围内使用,通常在函数体内或函数中的复合语句里。自动的销毁。(默认是随机值)


register(寄存器变量):

  • 寄存器数量有限,所以依赖运行程序的机器。
  • 寄存器变量不能取地址

static静态存储类型
静态存储类型的变量,既可以在函数体内,也可以在函数体外声明。(默认为0)
局部变量使用static修饰,有以下特点:

  • 在内存中以固定地址存放的,而不是以堆栈方式存放
  • 只要程序没结束,就不会随着说明它的程序段的结束而消失,它下次再调用该函数,该存储类型的变量不再重新说明,而且还保留上次调用存入的数值。
    static修饰全局变量之后即使加了extern也无法使用!!!

extern
当变量在一个文件中的函数体外说明(全局变量),所有其他文件中的函数或程序段都可引用这个变量。
extern称为外部参照引用型,使用extern说明的变量是想引用在其它文件中函数体外部说明的变量。

4.运算符

4.1算数运算符

运算符功能举例
+加,一目取正a + b
-减,一目取负a - b
*乘法a*b
/除法a/b(整除)
%取模或求余a % b
++增1a ++,++ a
减1a --,-- a

注意的点:

  • 符号与变量之间建议增加空格避免错误
  • float/double不能取余

4.2关系运算符

运算符功能举例
>大于a > b
>=大于等于a >= b
<小于3 < x
<=小于等于x <= y
==等于x == 0**(两个等号)**
!=不等于c != ‘\0’

4.3逻辑运算符

运算符功能举例
!逻辑反!(x == 0)
&&逻辑与x > 0 && x < 100
||逻辑或y < 10

注意的点:

  • 对应高中知识基本逻辑,与或非。
  • 短路,例如第一个是1的时候不会看第二个表达式 同样的前面是0后面不会再执行

4.4位运算符

运算符功能举例
~位运算反~ a
&位逻辑与a & b
|位逻辑或a
^位逻辑异或a ^ b
>>右移a >>1
<<左移a << 1

相关的练习和理解可以看看英雄哥的:《寒假算法集训》(专题三)位运算
做完会有更深的理解。

4.5赋值运算符

一般形式:

<左值表达式> = <右值表达式>

声明和赋值一起完成:

<变量>  <操作符>=  <表达式>

一些符合运算符

运算符功能
+=a += b 等价于 a = a + b
-=a -= b 等价于 a = a - b
*=a *= b 等价于 a = a * b
/=a /= b 等价于 a = a / b
%=a %= b 等价于 a = a % b
&=a &= b 等价于 a = a & b
|=a |= b 等价于 a = a | b
^=a ^= b 等价于 a = a ^ b
>>=a >>= b 等价于 a = a >> b
<<=a << b 等价于 a = a << b

4.6特殊运算符

三目运算符

<表达式1>  ?  <表达式2>  :  <表达式3>

结果就是如果表达式1True则返回表达式2,否则返回表达式3


,表达式

float  x=10.5,  y=1.8,  z=0;
  • 一般用于赋值,其他的语句一般不能用逗号!!!
  • 从左到右执行

sizeof运算符

sizeof(<类型或变量名>)  
  • 只针对数据类型,不针对变量!
  • 对指针的操作你会返回一个指针的长度 是错误的!!

4.7优先级

优先级运算符结合规律
1[]、 () 、. 、-> 、后缀++ 、后缀–->
2前缀++ 前缀-- 、sizeof 、&、 *(解引用) +(正) -(负) 、~ 、!<-
3强制类型转换<-
4*、 / 、% (算数运算符)->
5+、 - (算数运算符)->
6<<、 >>->
7< 、<=、 >、 >=->
8== 、!=->
9&(位逻辑运算符)->
10^(位逻辑运算符)->
11|(位逻辑运算符)->
12&&(逻辑运算符)->
13||(逻辑运算符)->
14? :<-
15=、 *=、 /= 、%=、 += 、-= 、<<= 、>>= 、&=、 ^= 、|=<-
16,->

写在最后

今天终于达成了一天一更,明天开始一天两更,冲!!!
今天基本上知识非常重要,群里出问题很多都是因为这部分知识点不够扎实,大家有个大概的印象就好,如果不清楚欢迎常回来看看,希望我能不断的去更新这个系列的文章。


另外我在更新的就是算法笔记的一些例题笔记,这个系列是用于提高我的算法能力,如果有兴趣对算法领域感兴趣找不到合适的入门文章也可以追更,如果我更新的太慢了请大家点赞收藏,一键三连才能更有更新的动力呀0.0

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XingleiGao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值