HQYJ嵌入式学习笔记——C语言复习day2
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.
1.计算机的数值表示
-
数值类型和非数值类型
- 二进制 0,1(0b1001)
- 八进制 0~7 (0146)
- 十进制 0~9
- 十六进制 0~f(0x3f)
八进制转二进制——>一位八进制数换三位二进制数。0124----->001 010 100
2.数据类型
数据类型作用: 决定变量在内存空间占的内存大小
内存的基本单位:字节(byte)
内存的最小单位:比特(bit)
1 byte = 8 bit
-
基本数据类型:(32位系统OS)
-
-
整型家族
-
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)
-
-
浮点型家族
-
float (4 byte) //有效数字 6 ~ 7位(四舍五入) float f = 1.2345678921; double (8 byte) //有效数字 15 ~ 16位(四舍五入)
-
-
字符型(属于整型家族,可以看成一个字节的int)
-
char (1 byte) unsigned char : 0 ~ 255 [signed] char : -128 ~ 127
-
-
整型家族
-
构造数据类型 : 数组 ,函数,结构体,共用体,枚举
-
指针
-
void空类型
- 通常在函数返回值还函数参数时候使用
- void *p;--------------->这个指针可以指向任意数据类型
- void num;//error,非法定义类型,报错
3.运算符
-
算数运算符
+ - * / %
-
int / int = int double / int ---隐式转换成---> double / double = double 隐式转换:范围小的往范围大的转 char short -----> int float -----> double unsigned + signed ----> unsigned 强制转换 格式 : (数据类型)变量名 (数据类型) (表达式)(float)(a + b) % 要注意运算符两边只能是整型数
-
逻辑运算符
-
逻辑表达式的结果只有两个值真和假 非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
-
8
LibreOJ 2789 「CEOI2015 Day2」世界冰球锦标赛 2020年9月7日2020年12月16日 by woshiluo 题目链接:
-
4
类 类与对象 类是一个抽象的概念,是指对现实生活中一类具有共同特征的事物的抽象。其实列化后称为对象。类里面由类属性组成,类属性可以分为数据属性和函数属性(函数属性又称为类...
-
7
菲律宾 | DAY2:马尼拉•长滩岛 罗磊 5年前发布在 摄像 2117 4
-
5
日本 | DAY2 :东京・皇宫・银座・筑地市场 罗磊 5年前发布在 摄像 2187 3 ...
-
8
An analogy to a real-life issue: This morning I wanted to eat some pizza; So, I asked my brother to get me some from Dominos, which is 3 km away. He got me the pizza, and I was happy only to realize it was too little fo...
-
2
蘭卡之旅 Day2 火車停運因禍得福發佈:2014-12-261,734 Views非技術類旅行
-
5
SRE Lesson One -- Day2 熟练使用 Markdown 原创
-
3
HBUACMday2 编程语言如何实现? 发表于 2023-01-0...
-
2
首尔 | DAY2:首尔塔・梨花女子大学发布时间: 2016-04-04
-
2
青岛 | DAY2: 八大关・天主教堂发布时间: 2015-04-10第二天,在酒店行政酒廊吃过早餐,酒廊位置不错,在大楼28层,半边墙的落地窗,可以看到青岛市景,就是天气不好灰蒙蒙的,当时没带相机...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK