当前文章复盘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;
}
#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;
}
& :全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;
}
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;
}
#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;
}
#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;
}
#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;
}
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;
}
在平常的逻辑代码里面,不推荐使用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;
}
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;
}
全部0条评论
快来发表一下你的评论吧 !