10

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

 3 years ago
source link: http://www.cnblogs.com/NeKo-life/p/14426492.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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、选择语句


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK