C语言单元小结(1)

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语言程序
编辑:
C语言单元小结(1)_第1张图片

编译:
这里写图片描述

运行:
这里写图片描述

sizeof

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

实现
查看int,char类型所占字节数
C语言单元小结(1)_第2张图片

这里写图片描述

自增自减符号

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

实现
C语言单元小结(1)_第3张图片

C语言单元小结(1)_第4张图片

C语言单元小结(1)_第5张图片

C语言单元小结(1)_第6张图片

程序结构

选择结构

1.if else

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

实现
C语言单元小结(1)_第7张图片

2.switch

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

实现
C语言单元小结(1)_第8张图片
C语言单元小结(1)_第9张图片

循环结构

1.for

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

实现
C语言单元小结(1)_第10张图片

2.while

C语言单元小结(1)_第11张图片

3.do while

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

实现
C语言单元小结(1)_第12张图片

位运算

知识点

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),保证其他位不变。
C语言单元小结(1)_第13张图片

2.给定一个整形数a,设置a的bit3~bit7,保持其他位不变。
C语言单元小结(1)_第14张图片

3.给定一个整型数a,清除a的bit15,保证其他位不变。
C语言单元小结(1)_第15张图片

4.给定一个整形数a,清除a的bit15~bit23,保持其他位不变。
C语言单元小结(1)_第16张图片

5.给定一个整形数a,取出a的bit3~bit8。
C语言单元小结(1)_第17张图片

6.用C语言给一个整形数的bit7~bit17赋值937(其余位不受影响)。
C语言单元小结(1)_第18张图片

7.用C语言将一个整形数的bit7~bit17中的值加17(其余位不受影响)。
C语言单元小结(1)_第19张图片

8.用C语言给一个整形数的bit7~bit17赋值937,同时给bit21~bit25赋值17。
C语言单元小结(1)_第20张图片

9.
C语言单元小结(1)_第21张图片

#include 

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;
}

C语言单元小结(1)_第22张图片

10.
C语言单元小结(1)_第23张图片

你可能感兴趣的:(C语言单元小结(1))