C 语言总结 _ 语句、运算符
作者:DS小龙哥
- 2022 年 4 月 28 日
本文字数:2489 字
阅读完需:约 8 分钟
当前文章复盘 C 语言的: 位运算运算符、基本运算符、数据类型、变量、for 语句、while 语句、goto 语句、switch 语句、运算符优先级强制转换等。
一、变量的命名
变量的命名: (13个字符)
1. A~Z a~z
2. 0-9
3. _
4. 说明: 只能字母和数字开头。不能使用关键字。
//左值和右值
unsigned int a=123; //4个字节
const int b=456;
char c='A';
float d=123.456; //123.456 浮点数常量
char *p="123456"; //"123456"字符串常量
复制代码
二、常量数据格式
#include "stdio.h"
//常量声明: U和L 表示无符号长整型
#define ABC 123UL
#define ABC 123ul
int main(void)
{
//0b101010; //二进制表示形式
//0x123; //表示十六进制
//123 //表示十进制
int a=0x123;
return 0;
}
复制代码
三、运算符
3.1 逻辑非
#include "stdio.h"
//常量声明: U和L 表示无符号长整型
#define ABC 123UL
int main(void)
{
int a=0;
if(!a)
{
printf("为真!\n");
}
int data=1234;
printf("%d\n",!!data); //1
return 0;
}
复制代码
3.2 位运算
& :全1为1,有0为0
| :全0为0,有1为1
^ :相同为0,不同为1
~ :1为0,0位1
>> :右移运算,低位溢出高位补0
<< :左移运算符,高位溢出,低位补0
复制代码
位运算符使用较多的地方:(1) 单片机里寄存器操作
(2) 协议加密解密、压缩算法、各种算法。
(3) 当做标志位使用
#include "stdio.h"
//系统里需要有8个状态位,需要存放8个状态位--------当做寄存器使用
int main(void)
{
unsigned char a=0; //8个位 范围:0~7
//如何将a第7位,置1呢?
a|=1<<7;
//如何将a第2位,置1呢?
a|=1<<2;
//将2的第3位和第4位置1
a|=0x3<<3;
//如何判断第7位是0还是1呢?
if((a>>7)&0x1)
{
printf("第7位的值为真!\n");
}
else
{
printf("第7位的值为假!\n");
}
//bool sbit 位定义 。
//bool a; sbit LED1=P1^1;
return 0;
}
复制代码
3.3 sizeof 运算符
Sizeof运算符
#include "stdio.h"
int main(void)
{
int a=1234;
printf("%d\n",sizeof(a)); //4
int b=1;
printf("%d\n",sizeof(b)); //4
return 0;
}
复制代码
3.4 三目运算符
#include "stdio.h"
int main(void)
{
/*
int a;
scanf("%d",&a); //取地址
int a,b;
a=a&b; //与
int a,b;
a=a*b; //乘号
int *a; //指针类型
*/
int a;
a=8>5?123:456; //if(8>5){a=123;}else{a=456;}
printf("%d\n",a); //123
return 0;
}
复制代码
3.5 运算符的优先级和强制转换
#include "stdio.h"
int main(void)
{
int a=123+456-12*5/78; //高优先级先结合,再依次....
//如果优先级同级,执行顺序是从左边到右边。
//优先级最高:()小括号
int b=123456789;
char a=(char)b; //强制转换,只是取低8位
//欺骗编译器,告诉它,b是char类型。
char a='8';
int b=(int)a; //强制转换
printf("b=%d\n",b); //还是字符8
return 0;
}
复制代码
四、语句
4.1 for 循环语句
#include "stdio.h"
//系统里需要有8个状态位,需要存放8个状态位--------当做寄存器使用
int main(void)
{
int a=123,b=456;
int cnt=0;
for(a=0;a<5;a++)
{
for(b=0;b<5;b++)
{
if(a==2)
{
break; //跳出最近的一层循环
}
cnt++;
}
}
/*
for(;;)
{
//死循环
}
while(1)
{
//死循环
}
do
{
//死循环
}while(1);
*/
printf("cnt=%d\n",cnt);//20
return 0;
}
复制代码
4.2 while 循环语句
while循环语句
#include "stdio.h"
//系统里需要有8个状态位,需要存放8个状态位--------当做寄存器使用
int main(void)
{
int a=0,b=0;
int cnt=0;
while(a<5)
{
while(b<5)
{
if(a==2)break;
b++;
cnt++;
}
b=0;
a++;
}
printf("cnt=%d\n",cnt);//20
return 0;
}
复制代码
4.3 goto 语句
在平常的逻辑代码里面,不推荐使用 goto 语句。常用的地方: 错误处理,某某程序初始化失败,就释放资源等操作。
#include "stdio.h"
//系统里需要有8个状态位,需要存放8个状态位--------当做寄存器使用
int main(void)
{
int cnt=0;
AA: //标签的定义,可以放在函数范围内的任意位置。(不能超出函数范围)
printf("123\n");
if(cnt==5)goto DATA;
cnt++;
goto AA;
DATA:
return 0;
}
Goto语句常用在错误处理:
#include "stdio.h"
//goto语句在错误处理里使用
int main(void)
{
if(LED_Init()<0) //表示该函数返回值错误
{
goto ERROR;
}
if(KEY_Init()<0) //表示该函数返回值错误
{
goto ERROR;
}
/*....*/
/*....*/
ERROR:
//释放资源,结束程序
return 0;
}
复制代码
4.4 Switch 语句
Switch 语句主要用在多分支选择结构----有很多种条件/情况。实际代码里,常用于菜单选择:
#include "stdio.h"
int main(void)
{
switch(cmd) //cmd的值传入之后,与case后面的比较,成功之后再执行语句
{
case 1: //case 后面值只能是常量,而且不能重复
break; //跳出最近的一层switch语句
case 2:
{
/*......*/
break;
}
case 3:
break;
/*......*/
default: //类似于else
printf("所有的条件都不成立!\n");
}
return 0;
}
复制代码
示例:
#include "stdio.h"
//投票系统,有3个待选举的人,A,B,C ,有10张票
int main(void)
{
int i;
int A=0,B=0,C=0;
int data;
for(i=0;i<10;i++)
{
printf("请投票(范围1~3):");
scanf("%d",&data);
switch(data) //data的值传入之后,与case后面的比较,成功之后再执行语句
{
case 1: //case 后面值只能是常量,而且不能重复
A++;
break; //跳出最近的一层switch语句
case 2:
B++;
break;
case 3:
C++;
break;
// default: //类似于else
}
}
printf("A=%d\n",A);
printf("B=%d\n",B);
printf("C=%d\n",C);
return 0;
}
复制代码
划线
评论
复制
发布于: 2022 年 04 月 28 日阅读数: 2
版权声明: 本文为 InfoQ 作者【DS小龙哥】的原创文章。
原文链接:【http://xie.infoq.cn/article/34cf90867af5c01fe680b54eb】。文章转载请联系作者。
DS小龙哥
关注
之所以觉得累,是因为说的比做的多。 2022.01.06 加入
熟悉C/C++、51单片机、STM32、Linux应用开发、Linux驱动开发、音视频开发、QT开发. 目前已经完成的项目涉及音视频、物联网、智能家居、工业控制领域
评论