嵌入式学习第二天

在昨天对Linux系统有了一个大体的认知后,今天我们学习了C语言的一些基础知识

1.进制转换

在c语言中,除了十进制,二进制、八进制和十六进制也有其对应应用。

(1)在二进制、八进制、十六进制向十进制转换时,方式是将对应位与对应位的权值相乘。

举例如下。

二进制 1001 1110向十进制转换:1*2^7+1*2^4+1*2^3+1*2^2+1*2^1=158

八进制17向十进制转换:1*8+7=15

十六进制1af向十进制转换:1*16^2+11*16+15=431

(2)十进制向二进制、八进制、十六进制转换时,方法是将十进制数除以进制数得到的余数逆序排列

(3)二进制、八进制、十六进制相互转换时,八进制一位对应二进制三位,十六进制一位对应二进制四位,十六进制一位对应八进制两位。

(4)当一个负的十进制转换为八进制或十六进制时,由于八进制和十六进制不采用负数,因此这种数值转换拥有独特的方式。

首先,将这个负的十进制数转化为32位二进制数,同时首位取1,作为这个数的原码。

之后,求出对应原码的补码,再将这个32位的二进制补码通过(3)中的方式转换为对应的八进制或十六进制数。

2.程序运行与编译流程

(1)程序如何在C语言中被运行起来?
    程序(外存中)
    执行(加载到内存中)
    程序运行结束(回收内存空间)


(2)gcc编译的流程步骤:
    gcc filename.c 

    1.预处理
        处理和#号相关代码

        1.头文件展开
        #include 
        2.宏定义替换
        #define  M    100  
        3.条件编译
        #if #elif #else #endif #ifndef #ifdef 

        gcc -E filename.c -o filename.i 

    2.编译
        将C语言程序编译成汇编代码

        gcc -S filename.c -o filename.s 

    3.汇编
        将汇编代码编译成二进制代码

        gcc -c filename.c -o filename.o 

    4.链接 
        将多个二进制代码链接成为一个可执行程序

        gcc filename.c -o filename 


3.基础数据类型

(1)整形数据

整形数据分为三大类:

short、int、long

每种整形数据又分为有符号(signed)与无符号(unsigned),在没有声明是否有符号时,默认数据为有符号(signed)。整形数据同其名字一般,是用来声明整数的数据。

1.short

short,即为短整形数据。“短”是相对整形数据int来比较的,在相同系统中所占内存空间不大于整形数据int。

short一般占用2个字节空间,也就是16位bit。有符号的short数据范围为-32768~32767,以补码方式储存;无符号型short数据范围为0~65536,以对应的二进制数储存。

2.int

int为整形数据。在c语言中,如果整形常量默认为int类型。

int一般占用4个字节空间,也就是32位bit。有符号的int数据范围为-21亿~21亿,以补码方式储存;无符号型short数据范围为0~42亿,以对应的二进制数储存。

3.long

long为长整形数据。与short类似,“长”是相对int比较的。在相同系统中所占内存空间不小于整形数据int。

long一般占用8个字节空间,也就是64位bit。有符号的long数据范围为-2^63~2^63-1,以补码方式储存;无符号型long数据范围为0~2^64,以对应的二进制数储存。

(2)浮点型数据

浮点型数据用来声明含小数部分的数据。由于十进制的含小数数据有部分不能转换为二进制小数,所以浮点型数据有很小的一部分误差。根据误差精度,浮点型数据分为单精度浮点数类型(float)和双精度浮点数类型(double)。浮点数类型均为有符号类型,没有无符号类型的概念。

浮点型数据在储存时使用类似科学计数法的方式,过程如下:

第一步,将数据转换为二进制小数。

第二步,使用二进制的科学计数法,将这个二进制小数整数位留1位,存入符号位。

第三步,将小数点后存入尾数位中。

最后一步,将二进制科学计数法中的指数+偏移数(float:127,double:1023)以二进制存入指数位。

1.float

float最多表示6-8位有效数字。占内存空间大小为4个字节。值域范围为-3.4*10^38-1~1.18*10^(-38)和1.18*16^(-38)~3.4*10^38。存储方式为1位符号位+8位指数位+23位尾数位。

2.double

double最多表示12-14位有效数字。占内存空间大小为8个字节。值域范围为-1.80*10^308~2.23*10^(-308)和2.23*10^(308)~1.80*10^308。存储方式为1位符号位+11位指数位+52位尾数位。

(3)字符型

char,字符型数据,存放# ?a A等符号。char分为有符号和无符号。有符号字符(signed char)占一个字节的内存空间,值域范围为-128~127;无符号字符(unsigned)占一个字节的内存空间,值域范围为0~255。存储方式为存储字符在ascii码表中对应数字的二进制形式。

(4)逻辑类型

bool,波尔类型。占一个字节的内存空间,分为true与false,分别表示0与1。

在C语言中所有的非0值均为逻辑真值
                            0值为逻辑假值

(5)缺省类型

void ,需搭配函数和指针使用。

(6)常量和变量

1.>常量: 在程序运行过程中值不允许发生改变的量
2.>变量: 在程序运行过程中值可以发生改变的量
3.>表达式:由一个或者多个运算符连接的变量和常量组成的式子

1.整形常量:

默认为int类型

2.整形变量:

变量要先定义再使用
变量定义的形式为:

数据类型 变量名;
1.变量名可以由字母、数字、下划线构成不能以数字开头
2.变量名不能与C语言关键字重名
3.变量名最好不要与库函数重名
4.变量名最好是见名知意 

变量拥有存储空间,也有值域范围。

3.浮点型常量:

默认为double类型,在小数末尾加f可表示float类型

4.浮点型变量

用 double d;

float f;的格式声明

  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值