嵌入式c语言基础语法

一,前言

1. C语言概述

  • C语言是计算器编程语言的一种,编程语言用于人和机器交流。

    • C语言通过编译器翻译成机器语言

  • C语言特点

    • 简洁

    • 高效

    • 可移植

    • 模块化

    • 标准化

  • C语言应用领域

    • 系统软件

    • 嵌入式系统

    • 网络设备

    • 游戏开发

二,入门练习代码

c语言程序: Hello 你好

// 加载头文件
#include <stdio.h>
// 入口函数
int main() {

    // 输出函数
    printf("Hello 你好\n");
    return 0;
}

C语言的源代码文件是一个普通的文本文件,但扩展名必须是 .

二,注释

- 分类

- 行注释 //

- - 快键键 ctrl+/

- 块注释 /**/

- - 快捷键 shift+alt+a 

// 加载头文件
#include <stdio.h>
int main() {


    // 行注释 
    /*
1、 注释是为了 方便阅读代码
2、注释是不执行的

块代码注释
    */

}

四,数据类型

  • 1.数据类型的作用:编译器预算数据分配的内存空间大小(重点)

  • 2可以通俗理解为:数据类型是用来规范内存的开销,约定数据在内存中的格式,便于存储。

 一,变量的语法(重点)

 

#include <stdio.h>

int main() {
    // MMU
    /**
     *变量: 存储数据的空间  类型不同 空间不同
    变量的命名 :数字、字母、下划线_组成;标识符
命名的规则  大驼峰 小驼峰
     *
    */
    int num = 10;
    char s = 'a';
    short m = 13;
    long lo = 123123;
    double pi = 3.1415926;

    // 注意事项:变量先定义 再使用

    // printf("%d\n", sum);

    printf("%d\n", num);
    printf("%f\n", pi);

    return 0;
}

二,命名规则和规范

标识符是用户编程时使用的名字, 用于给变量、 函数、 类等命名

  • 命名规则

    • 规则:规则是一定要遵循,不遵循就报错

      • 由数字, 字母, 下划线_组成

      • 不能使用数字开头

      • 不能使用关键字

      • 严格区分大小写

    • 关键字(这个不用记):已经占用的名字,用户起名不能和关键字重名

      img

  • 命名规范:可以不遵循,只是一个建议,建议见名知意

    • 风格:

      • 大驼峰

        • 每个单词首字母大写, 例如: MyFirstName

      • 小驼峰

        • 第二个单词开始首字母大写, 例如: myFirstName

      • 下划线命名

        • 每个单词之间使用下划线连接, 例如: my_first_name

三, char类型

  • char的本质就是一个1字节大小的整型,一个字符对应一个ASCII 编码数字

 

#include <stdio.h>

int main() {
    // char表示为字符类型,用于存储单个字符,每个字符变量都是由8个bit位构成,在内存中就是1个字节。



    /**
     *  1字节 = 8位
    */
    char s = 'c';

    printf("%c\n", s);
    printf("%d\n", s); //97 

    return 0;
}

四,bool类型

  • 早期C语言没有布尔类型数据,以0代表逻辑假,非0代表逻辑真

  • C99标准定义了新的关键字_Bool,提供了布尔类型,或者也可以使用stdbool.h中的bool

#include <stdio.h>
#include <stdbool.h>


int main() {
    //布尔的本质  0 1 
    int is_sale = true;
    int is_open = false;

    printf("%d\n", is_sale);
    printf("%d\n", is_open);

    return 0;
}

五,可移植的类型

  • C语言在可移植类型 stdint.h 和 inttype.h 中规定了精确宽度整数类型,以确保C语言的类型在各系统内功能相同

#include <stdio.h>
#include <inttypes.h>
int main() {
    // 可移植类型 是为了保障各个平台的数据类型相同
    //  1  8  2^8-1  uint_8  0-255    0-127 
    uint8_t a = 145;
    int16_t b = 123;
    // sizeof 
    printf("%d\n", a);
    printf("%d\n", b);

    printf("sizeof int8_t =%d \n", sizeof(int8_t));

    // unsigned  类型


    return 0;
}

六,数值表示

  C语言如何表示相应进制数

进制描述
十进制以正常数字1-9开头,如15
八进制以数字0开头,如017
十六进制以0x或0X开头,如0xf
二进制以0b或0B开头,如0b1111
include <stdio.h>

int main() {
    //  1、二进制  逢二进一    除二取余法 
    //     0  0
    //     1  1
    //     2  10
    //     3  11
    //     4   100
    //     5   101
    //     6   110
    //     7   111
    //     8   1000

    //     转换  8  《 = 》 2
    //     01   4    5
    //     001 100 101

    //     转换 16进制 = 2
    //     A      B    C
    //     1010  1011 1100

    return 0;
}

 

#include <stdio.h>

int main() {
    /**
     * 十进制 正常的数值类型
     * 八进制  0-7 0
     *十六进制  0-9ABCDEF  0x
     二进制   0 1     ob
    */

    int a = 256;
    int b = 012;
    int c = 0x123A;
    int d = 0b0101;

    printf("%d\n", a);
    printf("%o\n", b);
    printf("%x\n", c);
    printf("%d\n", d);

    return 0;
}

七,数值存储方式

  • 在计算机系统中,数值一律用补码来存储

  • 对于正数,原码、反码、补码相同

  • 对于负数,其补码为它的反码加1

    • 负数的补码符号位不动,其他位求反,最后整个数加1,得到原码

 

  • 原码

    原码:一个数的原码就是它的二进制表示,其中最高位是符号位(0表示正,1表示负)。

    十进制原码
    50000 0101
    100000 1010
    00000 0000
    -11000 0001
    -51000 0101

    原码表示法简单易懂,与带符号数本身转换方便,只要符号还原即可,但当两个正数相减或不同符号数相加时,必须比较两个数哪个绝对值大,才能决定谁减谁,才能确定结果是正还是负,所以原码不便于加减运算。

    反码

    对于正数,反码与原码相同,对于负数,符号位不变,其它部分取反(1变0,0变1)。

    十进制原码反码
    50000 01010000 0101
    100000 10100000 1010
    +00000 00000000 0000
    -11000 00011111 1110
    -51000 01011111 1010
    补码(重点)

    在计算机系统中,数值一律用补码存储。

    十进制原码反码补码
    50000 01010000 01010000 0101
    100000 10100000 10100000 1010
    +00000 00000000 00000000 0000
    -11000 00011111 11101111 1111
    -51000 01011111 10101111 1011
    • 计算机的基石-补码

    对于一个字节(8 位),他所能表示的范围有多大呢?所有可能编码如下,共 256种。

    11111111
    11111110
    ********
    ********
    00000011
    00000010
    00000001
    00000000
    • 3.4.2 补码的编码规则

    如何来利用这些硬件的基础来表示我们需要的数据范围呢?就是编码。

    在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

    • 补码的运算

      1. 正整数的补码是其二进制表示,与原码相同

      2. 求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0 变 1,1变 0)后加 1。

      【例 1】求-5 的补码。

      -5 => |-5| => 0000 0101 => 1111 1010 => 1111 1011

      【例 2】数 0 的补码表示是唯一的。

      0 => 0000 0000 => 1111 1111 => 0000 0000

    5.3 转换关系

    1. 原码表示方法:最高位为符号位,1表示负数,0表示正数。其余比特位表示数值。

    2. 反码表示方法:正数的反码是其本身,负数的反码为在原码的基础上,符号位不变,其余位取反。

    3. 补码表示方法:正数的补码就是其本身,负数的补码为在原码的基础上,符号位不变,其余位取反,6.再+1(即在反码的基础上+1)。

 

八、程序的输出和输入

7.1输出(重点)

#include <stdio.h>

int main() {
    //  %d  %c %f %s字符串

    int num = 10;
    char a = 's';
    float f = 123.123;
    short mm = 123123;

    // %#X  占位符  八进制和十六进制 可以加上前缀# 
    printf("%d\n", num);
    printf("%d\n", sizeof(int));
    printf("%c\n", a);
    printf("%f\n", f);

    printf("%p\n", &num);
    return 0;
}

7.2输入

#include <stdio.h>

int main() {
    //  scanf("格式化字符串", &变量1, &变量2,...);
    // 输入年龄 然后打印
    // 数据到底是给变量 还是给定变量地址
    int age;
    printf("请输入你的年龄:");
    scanf("%d", &age);
    printf("你的年龄是%d\n", age);

    return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值