HQYJ嵌入式学习笔记——C语言复习day2

1.计算机的数值表示

  • 数值类型和非数值类型

    1. 二进制 0,1(0b1001)
    2. 八进制 0~7  (0146)
    3. 十进制 0~9
    4. 十六进制 0~f(0x3f)

八进制转二进制——>一位八进制数换三位二进制数。0124—–>001 010 100

2.数据类型

数据类型作用: 决定变量在内存空间占的内存大小

内存的基本单位:字节(byte)

内存的最小单位:比特(bit)

1 byte = 8 bit


  1. 基本数据类型:(32位系统OS)


    1. 整型家族

      • int (4 byte)
        unsigned int : 0 ~2^32 - 1
        [signed] int : -2^32 ~ 2^31 - 1
        short (2 byte)
        unsigned short : 0 ~ 2^16 - 1    0 ~ 65535
        [signed] short : -2^15 ~ 2^15 - 1    -32768 ~ 32767
        long (4 byte)
        long long (8 byte)
        
    2. 浮点型家族

      • float (4 byte)
        //有效数字 6 ~ 7位(四舍五入)    float f = 1.2345678921;
        double (8 byte)
        //有效数字 15 ~ 16位(四舍五入)
        
    3. 字符型(属于整型家族,可以看成一个字节的int)

      • char (1 byte)
        unsigned char : 0 ~ 255
        [signed] char : -128 ~ 127
        
  1. 构造数据类型 : 数组 ,函数,结构体,共用体,枚举

  2. 指针

  3. void空类型

    1. 通常在函数返回值还函数参数时候使用
    2. void *p;—————>这个指针可以指向任意数据类型
    3. void num;//error,非法定义类型,报错

3.运算符

  1. 算数运算符

+ – * / %

  • int / int = int
    double / int ---隐式转换成---> double / double = double
    隐式转换:范围小的往范围大的转
    char  short  -----> int
    float -----> double
    unsigned + signed ----> unsigned
    强制转换
      格式 : (数据类型)变量名
             (数据类型) (表达式)(float)(a + b)
    % 要注意运算符两边只能是整型数
    
  1. 逻辑运算符

    • 逻辑表达式的结果只有两个值真和假 非0表示真 0表示假

      &&

      表达式1 && 表达式2 : 只要有一个表达式结果为假,整个表达式的结果就为假

      只要表达式1的结果为假,所以表达式2不会再计算

      int a = 5, b = 6;

      int c = a++ > 5 && ++b > 6; //a=6 b=6 c=0

      ||

      表达式1 || 表达式2 : 只要有一个表达式结果为真,整个表达式的结果就为真

      只要表达式1的结果为真,那么整个逻辑表达式的结果就为真,所以表达式2也不会再计算

      !

      int a = 0;

      if(a) //<====>if(a!=0) 表达式不成立 if(!a) 这个表达式成立

      {

      printf(“*****\n”);

      }

位运算符(int)

& : 按位与

12 & 23 = 0000 1100 & 0001 0111 = 0000 0100 4

| : 按位或

12 | 23 = 0000 1100 | 0001 0111 = 0001 1111 31

~ : 按位取反

~ 12

^ :按位异或 相同为0 不同为真

12 ^ 23 = 0000 1100 ^ 0001 0111 = 0001 1011 27

<< : 左移

12 << 3 0000 1100 << 3 = 0110 0000 = 96

>> : 右移

12 >> 3 1100 >> 3 = 0001 (高位补符号位)

清零

1011100111 //将第6位清零 & ~(1<<6)

& 0111111 ~(1 << 6) 1000000

——————

1010100111

将某一位或者某几位 置1

101111010011 //将第5位置1 |(1 << 5)

| 100000 (1 << 5)

———————

101111110011

1011000011

| 111000 (7 << 3)

———————

1011111011

关系运算符

> < >= <= == !=

赋值运算符

= += -= ++ —

++在前,先加1再取值;在后,先取值在加1

int a = 5; //a+=2; <===>a = a+2; &= |= ~=

int c = a++;

printf(“%d,%d\n”,a++,a); //5 6

printf(“%d,%d\n”,++a,a); //6 6

逗号运算符

计算规则:从左到右依次计算,取最后一个表达式的值作为逗号表达式的值

表达式1,表达式2,表达式3…..

int a = (12,14,16); // a = 16

条件运算符(三目运算符)

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

计算规则:先去判断表达式1是否为真,如果为真就执行表达式2否则执行表达式3

int a = 5,b = 10,c = 8;

a > b ? a : b //10

a>b ? a : a>c ? a :c //8

sizeof() : 计算内存大小

格式:sizeof(变量名) sizeof(数据类型)

float f; sizeof(f) sizeof(float)

() [] & *

4、结构性语句

顺序语句

printf()

scanf()

getchar() : 从键盘获取一个字符

char ch = getchar();

printf(“ch = %c,ch = %d\n”,ch,ch);

putchar() : 向显示屏输出一个字符

char ch = getchar();

putchar(ch);

gets() : 获取字符串

puts() : 输出字符串

选择语句

循环语句

5、算法

冒泡排序

选择排序

6、定义变量

格式:

存储类型修饰符 数据类型修饰符 数据类型 标识符

存储类型修饰符:

auto : 默认 , 一般修饰局部变量,放在栈区

static : 静态 , 会放在数据段

extern :外部声明 , 1.c定义的全局变量想要在2.c使用必须在2.c对这个变量做一个外部声明

register : 寄存器类型,如果被register修饰会看当前有没有可用寄存器,

如果有变量会被放在寄存器里面,如果没有,变量会自动转为auto

数据类型修饰符:

const : 将变量变成只读

标识符的定义:(程序员自己取的名字 普通变量名 数组名 指针名 函数名…)

(1)由数字 字母 下划线组成,不能以数字开头

(2)不能与关键字重名

(3)对大小写敏感 见名知意

int a; <====> auto signed int a;

常量 : 在程序运行过程中不能被更改的量

整型常量

99

0xff

066

浮点型常量

12.5

1.2e+5 1.2*10^5

2.34e-4 2.34*10^-4 0.000234

字符型常量

ASCII码表 带单引号才叫字符 a b ‘a’ ‘b’

转义字符 ‘\n’ ‘\t’ ‘\b’ ‘\bbb’ 1 ~ 3 ‘\xbb’ ‘\123’ ‘\x12’ “\123456” “\12fa”

字符串常量

7、输入输出函数

#include <stdio.h>

printf(“格式控制串”,输出表); ——> 按照指定格式将数据输出到屏幕上

输出表:要输出的数据 有多少个格式化符就有多少个要输出的数据

格式控制串: 原样输出的内容+格式化符

格式化符:

%d —–> 有符号的十进制数

%u——> 无符号的十进制数

%o——> 八进制数

%x——> 十六进制数

%f —–> 浮点型

%g —–> 指数形式

%c—–> 字符

%s—–> 字符串

%p —–> 地址

int a = 10000000;

printf(“a=%d\n”,a); a=10 //默认右对齐

printf(“a=%5d\n”,a); a=10000000 //由于指定的宽度5比数据的宽度要小,所以数据原样输出

prinrf(“a=%10d\n”,a); a= 10000000; //指定的宽度比数据宽度要大,用空格去补

int b = 0xaa;

printf(“%d\n”,b);

printf(“%x\n”,b); aa

printf(“%#x\n”,b); 0xaa //#是将进制数的前缀输出

float f = 12.5;

printf(“f=%f\n”,f); f=12.500000 //编译器默认小数输出6位

printf(“f=%.2f\n”,f); f=12.50

printf(“f=%7.2f\n”,f); f= 12.50

scanf(“格式控制串”,地址表);——>按照指定形式从键盘获取数据输入到指定地址

&+变量名 : 变量的首地址

格式控制串: “”里面除了格式化符,其他的内容原样输入

int a ;

scanf(“%d”,&a); 10

scanf(“a=%d”,&a); a=10

int a,b;

scanf(“%d%d”,&a,&b); 10 20

scanf(“a=%d,b=%d”,&a,&b); //在输入的时候只能按照a=10,b=20的格式进行输入

scanf(“%d%d\n”,&a,&b); //在输入的时候要用非空字符去结束输入

多个变量进行输入,要用分隔符(空字符) 空格 回车 Tab

float num;

scanf(“%.2f”,&num); //error 小数在输入的时候不能指定精度

char ch1,ch2;

scanf(“%c%c”,&ch1,&ch2); //如果用分隔符会将分隔符接收

scanf(“%c%*c%c”,&ch1,&ch2); //%*c会抑制掉一个字符

scanf(“%c,%c”,&ch1,&ch2); //指定格式输入

8、内存存储

整型数在内存里面存储的是补码

正数的原码 反码 补码都一样

负数的补码是反码+1

有符号数最高位是符号位,正数符号位是0 负数符号位是1

反码符号位不变,数据位改变

int a = 5;

0000 0000 0000 0000 0000 0000 0000 0101

int a = -5;

原码:1000 0000 0000 0000 0000 0000 0000 0101

反码:1111 1111 1111 1111 1111 1111 1111 1010

补码:1111 1111 1111 1111 1111 1111 1111 1011

printf(“%d\n”,a);

printf(“%u\n”,a);

char ch = 130; //-128 ~ 127

printf(“%d\n”,ch); //-126

原码: 1000 0010

1000 0010

1111 1101

1111 1110

0000 0000 0000 0000 0000 0000 1000 0010

char ch = -130;

printf(“%d\n”,ch); //126

原码:1000 0010

反码:0111 1101

补码:0111 1110

1000 0000 0000 0000 0000 0000 1000 0010

1111 …. 0111 1101

1111 …. 0111 1110

9、选择语句

博客园精华区
我还没有学会写个人说明!
下一篇

超跑触电,是梦碎的声音?

你也可能喜欢

评论已经被关闭。

插入图片