C语言单元小结(1)

来源:互联网 发布:海口seo外包公司 编辑:程序博客网 时间:2024/05/17 06:18

C语言基础

知识点:

经典入门“hello world!”
*源文件:hello.c
*头文件:用#include包含
*关键字:关键字,32个关键字。main是主函数,程序运行入口。return是函数结束的标志。
*符号:#号是C语言的一种符号,%取余符号 ,++、–、&、|、~、!、;(一句代码的结束标志)。
注释://注释一行代码的,多行的语句就用/…*/注释。
*变量:是变化的,在计算过程中会发生变化的量。
*函数:函数小括号里面参数列表,紧跟一对花括号,话括号里面是函数体。
步骤:
编辑、编译、运行、调试

数据类型:整形(long int, short), 浮点型, 字符型。
负数、隐式转换
字节:所有的系统里面,一个字节占8bit。整形占4个字节32位。

c语言文件的生成过程

知识点:
过程:编辑、编译、运行、调试。
在redhat环境下:
编辑:用vim命令打开.c文件编辑
编译:使用cgg,cgg xxx.c,-o可指定.out文件名
运行:编译之后生成.out文件,输入文件目录即编译
调试:根据编译生成的error,重新打开源文件进行调试

补充:
gcc生成可执行的二进制文件

实现
生成输出hello world的c语言程序
编辑:
这里写图片描述

编译:
这里写图片描述

运行:
这里写图片描述

sizeof

知识点
sizeof是运算符,计算变量或类型所占空间的大小字节数

实现
查看int,char类型所占字节数
这里写图片描述

这里写图片描述

自增自减符号

知识点
从右向左执行
对于判断语句,前置与后置效果不同,对于赋值语句,效果相同

实现
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

程序结构

选择结构

1.if else

知识点
if和else之间不能有其他语句
选择项大于2应使用elseif

实现
这里写图片描述

2.switch

知识点
每一个case必须有break
switch入口不可以是小数

实现
这里写图片描述
这里写图片描述

循环结构

1.for

知识点
for(初始条件;终止条件;循环增量)

实现
这里写图片描述

2.while

这里写图片描述

3.do while

知识点
while条件后必须加分号

实现
这里写图片描述

位运算

知识点

1、位与&
(1)注意:位与符号是一个&,两个&&是逻辑与。
(2)真值表:1&0=0 1&1=1 0&0=0 0&1=0
(3)从真值表可以看出:位与操作的特点是,只有1和1位于结果为1,其余全是0.
(4)位与和逻辑与的区别:位与时两个操作数是按照二进制位彼次对应位相与的,逻辑与是两个操作数作为整体来相与的。(举例:0xAA&0xF0=0xA0, 0xAA && 0xF0=1)

2、位或|
(1)注意:位或符号是一个|,两个||是逻辑或。
(2)真值表:1|0=1 1|1=1 0|0=0 0|1=1
(3)从真值表可以看出:位或操作的特点是:只有2个0相位或才能得到0,只要有1个1结果就一定是1.
(4)位或和逻辑或的区别:位或时两个操作数是按照二进制位彼次对应位相与的,逻辑或是两个操作数作为整体来相或的。

3、位取反~
(1)注意:C语言中位取反是~,C语言中的逻辑取反是!
(2)按位取反是将操作数的二进制位逐个按位取反(1变成0,0变成1);而逻辑取反是真(在C语言中只要不是0的任何数都是真)变成假(在C语言中只有0表示假)、假变成真。

4、位异或^
(1)位异或真值表:1^1=0 0^0=0 1^0=1 0^1=1
(2)位异或的特点:2个数如果相等结果为0,不等结果为1。记忆方法:异或就是相异就或操作起来。

5、左移位<< 与右移位>>
C语言的移位要取决于数据类型。
对于无符号数,左移时右侧补0(相当于逻辑移位)
对于无符号数,右移时左侧补0(相当于逻辑移位)
对于有符号数,左移时右侧补0(叫算术移位,相当于逻辑移位)
对于有符号数,右移时左侧补符号位(如果正数就补0,负数就补1,叫算术移位)

5、左移位<< 与右移位>>
C语言的移位要取决于数据类型。
对于无符号数,左移时右侧补0(相当于逻辑移位)
对于无符号数,右移时左侧补0(相当于逻辑移位)
对于有符号数,左移时右侧补0(叫算术移位,相当于逻辑移位)
对于有符号数,右移时左侧补符号位(如果正数就补0,负数就补1,叫算术移位)
嵌入式中研究的移位,以及使用的移位都是无符号数

如何用位运算构建特定二进制数

知识点

位与、位或结合特定二进制数即可完成寄存器位操作需求
(1)如果你要的这个数比较少位为1,大部分位为0,则可以通过连续很多个1左移n位得到。
(2)如果你想要的数是比较少位为0,大部分位为1,则可以通过先构建其位反数,然后再位取反来得到。
(3)如果你想要的数中连续1(连续0)的部分不止1个,那么可以通过多段分别构造,然后再彼此位与即可。这时候因为参与位或运算的各个数为1的位是不重复的,所以这时候的位或其实相当于几个数的叠加。

练习:

1.给定一个整型数a,设置a的bit3(为1),保证其他位不变。
这里写图片描述

2.给定一个整形数a,设置a的bit3~bit7,保持其他位不变。
这里写图片描述

3.给定一个整型数a,清除a的bit15,保证其他位不变。
这里写图片描述

4.给定一个整形数a,清除a的bit15~bit23,保持其他位不变。
这里写图片描述

5.给定一个整形数a,取出a的bit3~bit8。
这里写图片描述

6.用C语言给一个整形数的bit7~bit17赋值937(其余位不受影响)。
这里写图片描述

7.用C语言将一个整形数的bit7~bit17中的值加17(其余位不受影响)。
这里写图片描述

8.用C语言给一个整形数的bit7~bit17赋值937,同时给bit21~bit25赋值17。
这里写图片描述

9.
这里写图片描述

#include <stdio.h>int main(){    char n[6][6] = {' '};//行数列数从1开始    //先给第三行和第三列全部赋值为*    int i = 0;    for (i = 1; i < 6; i++)    {        n[3][i] = '*';        n[i][3] = '*';    }    //再给中间的正方形赋值为*    int j = 0;    i = 0;    for (i = 2; i < 5; i++)    {        for (j = 2; j < 5; j++)        {            n[i][j] = '*';        }    }    //输出    int r = 1;    int c = 1;    for (r = 1; r < 6; r++)    {        for (c = 1; c < 6; c++)        {            printf("%c", n[r][c]);        }        printf("\n");    }    return 0;}

这里写图片描述

10.
这里写图片描述

原创粉丝点击