简单的把我最近两周学习的嵌入式c语言基础编程32个知识点串联下,能举例子体会的我不会啰嗦的,直接干货。不清楚的可以留言或者是自己查询资料。
1.gcc的使用
xx.c源文件
gcc xx。c 默认生成a.out
gcc xxc -o xx
.xx执行可执行文件
2.数据类型(在32位机)
字符型char--1个字节
短整型short--2个字节
整型int--4个字节
长整型long--4个字节
单精度float--4个字节
双精度double--8个字节
3.变量的定义和初始化
数据类型+变量名
字符类型注意使用‘’
标识符的命名规范
使用英文,禁止拼音
驼峰命名法,下划线
顾名思义
注意使用驼峰命名法,不能使用拼音代替,见名思意。
最后一点不能和关键字重复。
c语言简洁,紧凑,适应方便,灵活,ANSI C一共只有32个关键字:
auto,break,case,char,const,continue,default,do,double,else,enum,extern,float,for,goto,of,int,long,register,return,short,signed,static,sizeof,struct,switch,typedef,union,unsigned,void,volatile,while。
这里再次提下c语言词汇概念。
分为六类。
1.标识符:在程序中使用的变量名,函数名,标号等统称为标识符。规定只能是数字字母和下划线组成的字符串,并且第一个必须是字母或者是下划线。
2.关键字:c语言本身定义的特定的字符串,也称保留字,
3.运算符。
4.分隔符:逗号和分号。
5.常量。
6.注释符:/* */
5.十进制转换成二进制,
十六进制,八进制,转换。
求余%。
进制。
十进制:数码0-9.例:234,-545.
八进制:数码0-7.必须零开头,015(十进制13),0101(十进制65)
十六进制:数码0-9.a-f或A-F。前缀为0x。0xa0(十进制160),0x2a(十进制42)。
6.原码,补码,反码
定义int 类型 -10.
数值一补码表示;
原码:000000000001010
正数的补码和原码相同。
负数的补码将绝对的二进制形式按位取反加一,
取反:1111111111110101
+1得到-10的补码:
1111111111110110
由此可知左边的第一位是表示符号的。
7.return代表函数结束,void类型的函数,可以没有返回值。
常用转义符。
\n 回车,ASCII代码10.
\t 横向调到下一制表位置,ASCII代码9
\b 退格,ASCII代码8
\r 回车,ASCII代码13
\f 走纸换页,ASCII代码12
\ 反斜杠\ ASCII代码92
\’ 单引号符ASCII代码39
\” 双引号符ASCII代码34
\a 鸣铃ASCII代码7
8.大端小高,小端小低,
变量数据类型转换,
自动转换,
char,short--->unsigned-->long--->double--->float
遵循右边类型转换左边的类型。
强转换
一般形式;(类型说明符)(表达式)
(int)(x+y)
8-1 重要的运算符,共十种
1.算术运算符,
+加.-减.乘./除.%求余。自加++,自减--。七种
2.关系运算符,
用于比较运算,大于>小于<等于==大于等于>=小于等于<=不等于!=六种
3.逻辑运算符
用于逻辑运算,与&&,或||,非!。三种
4.位操作运算符,
参与运算的量,按照二进制运算,位与&,位或|,位非~,位异^, 左移<<,右移>>.六种
有人会说,位运算没有什么实际意义啊。用于优化,以后再聊。
5.赋值运算符:
用于赋值运算,分为简单赋值=,复合算术赋值(+=,-=,=,/=,%=),复合位运算符(&=,|=,^=,>>=,<<=)三类十一种。
6.条件运算符:
这是一个三目运算符,用于条件求值(?:)
7.逗号运算符;
用于把若干个表达式组合成一个表达式(,)
8.指针运算符:
用于取内容(*)和取地址(&)二种运算,
9.求字节运算符
用于计算数据类型所占字节(sizeof)
10.特殊运算符:
有括号(),下标[],成员(->,.)等几种。
8-2
运算优先级一共15种,1级最高,这里暂不列出最好的方法就是多看。
一般而言,单目运算符优先级较高,赋值运算符优先级较低,算数运算符优先级较高,关系个逻辑运算符优先等级较低,
若一个运算量两侧的运算符优先级相同时,则按照运算符的结合性质所规定的结合方向处理。
运算符的结合性,左结合性,右结合性要注意一些右结合性的,(自右往左)常见的赋值运算符=。x=y=z。是x=(y=z),c语言中有不少这种类型, 应当多注意区别,以免错误。 多数运算具有左结合性,单目,三目,运算符,赋值运算符具有右结合性。
最后一点简单看看
i++:参与运算后,再自加
i--:参与运算后,再自减
++i:先自加,再参与运算
--i:先自减,再参与运算
要看清,避免混淆。
22点下课,我该撤了,最近一直没怎么总结,总结一定是必须的,长得帅不帅都是先看脸。后面还有两三篇总结之后的24点。
谢谢大家的支持。
最后感受下位运算的优点
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)。
110
AND 1011
0010 --> 2
有人会说,计算6 and 11没有什么实际意义啊。这一系列的文章就将告诉你,位运算到底可以干什么,有些什么经典应用,以及如何用位运算优化你的程序。附上网址:
http://baike.baidu.com/view/379209.htm 还是比较全的。
例如: int i = 0x80000000; i = i >> 1; //i的值不会变成0x40000000,而会变成0xc0000000 就是说,对于有符号数, 符号位向右移动后,正数的话补0,负数补1, 对于有符号数,在右移时,符号位将随同移动: 当为正数时, 最高位补0, 而为负数时,符号位为1, 也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位. 最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。 负数10100110 >>5(假设字长为8位),则得到的是 11111101 总之,在C中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变.实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效
率高很多.
x>>1;//相当于x/=2
x<<1;//相当于x*=2
x>>2;//x/=4
x<<2;//x*=4
x>>3;//x/=8
x<<3;//x*=8
以此类推. 无符号:
main()
{
unsigneda,b;
printf("inputanumber:");
scanf
("%d",&a);
b=a>>5;
b=b&15;
printf
("a=%d\tb=%d\n",a,b);
}
请再看一例!
main()
{
chara='a',b='b';
int p,c,d;
p=a;
p=(p<<8)|b;
d=p&0xff;
c=(p&0xff00)>>8;
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
}
异或操作的妙用
- 使特定位翻转 要使哪几位翻转就将与其进行∧运算的该几位置为1即可。
2 与0相∧,保留原值.
3.交换两个值,不用临时变量. 我们可以在不用引入其他变量就可以实现变量值的交换 用异或操作可以实现
我的水平就看到这,咱们回聊。
byebye!!!
by 一个来自上嵌的娃。