C语言----词法符号
目录
关键字
概念:由系统预定义(提前定义好的)的具有特殊功能的词法符号
分类:
存储类型:auto(自动) static(静态) extern(外部引用) register(寄存器)
数据类型:char(字符型) short(短整型) int(整型) long(长整型)
float(单精度浮点型) double(双精度浮点型) { signed(有符号的)
unsigned(无符号) }
构造类型:struct(结构体) union(共用体) enum(枚举)
选择结构:if else switch case default
循环结构:for while goto do {break continue}(循环控制语句)
其他(其他功能):void(空类型) typedef(重定义) const(常量化,是只读的)
sizeof(计算数据所占空间大小的) volatile(防止编译器优化)
return(函数返回值)
运算符
算术运算符
逻辑运算符
位运算符
关系运算符
赋值运算符
三目运算符
1. 算数运算符:
+ - * / % ++ --
/:整数相除,向下取整
当你除号两边都是整数的时候,得到的也一定会是个整数
#include <stdio.h>
int main(int argc, char const *argv[])
{
// int a = 5/2; // 2
// float a = 5/2; // 2.000000
float a = 5.0/2; // 2.500000
printf("%f\n", a);
return 0;
}
%:取余只能用于整数运算
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a = 10.0 % 3; // 报错
printf("%d\n", a);
return 0;
}
练习:将12345的个十百千万位分别输出到终端。
++:
如果把它当做一个表达式来算的话,你要根据这个自加和自减的位置来判断先后运算的顺序,位置不一样先后顺序不一样
赋值运算:
int a = 3;
1) int b = ++a; // b = 4 a=4 ++ 在前,先自加再赋值
2) int b = a++; // b = 3 a=4 ++在后, 先赋值再自加
打印语句:
int a = 3;
1) printf("%d\n", a++); // 3++在后,先打印再自加
2) printf("%d\n", ++a); // 4++在前,先自加再打印
独立成句:
inta =3;相当于 a = a+1
1) a++;
printf("%d\n", a); // a=4
2) ++a;
printf("%d\n", a); // 4
--:
只是把自加变成了自减,只是将 a-1 赋值给了 a, 其他的地方没有变化,只要把自加弄懂了,自减也是一样的
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 10; // a = 10
int b = a++; // b = 10 a = 11
int c = a + b; // c = 21
int d = (b++) +c; // d = 31 b = 11
printf("%d = \n",d);
return 0;
}
A. d = 31 √
B. d = 32
C. d = 33
D. d = 34
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 10; // a = 10
int b = ++a; // b = 11 a = 11
int c = a + (b++); // c = 22 b = 12
int d = b + c; // d = 34
printf("%d\n", d);
}
A. d = 31
B. d = 32
C. d = 33
D. d = 34 √
2. 逻辑运算符
也就是看你这个逻辑表达式是真的还是假的
&&(与) ||(或) !(非)
&&(逻辑与)
全真则真,一假则假
||(逻辑或)
一真则真,全假则假
!(逻辑非)
非真即假,非假即真
截断法则:
● 逻辑与运算中:如果前面的表达式为假,则后面的表达式不执行
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a = 3, b = 4, c = 5, d = 6, m = 2, n = 2;
(m = a > b) && (n = c > d);
printf("%d %d\n", m, n);
return 0;
}
● 逻辑或运算中:如果前面的表达式为真,则后面的表达式不执行
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a = 3, b = 4, c = 5, d = 6, m = 2, n = 2, z = 2;
(z = c < b) || (m = a < b)|| (n = c > d);
printf("%d %d %d\n", z ,m, n);
return 0;
}
3.位运算符
位运算符的位指的是二进制里的每一位,指的是 0 和 1 ,没有真假,因为它不是一个逻辑上的判断真假,而是让你去计算 0 和 1 通过这些位运算符算出来的结果到底是什么样的,按位进行操作了
&(位与) |(位或) ^(异或) ~(取反) <<(左移) >>(右移)
原码 反码 补码
正数: 本身 本身 本身
负数: 本身 除符号位其他按位取反 反码+1
&(位与)
全1则1,有0则0
8 & 10 == 8
8的补码:0000 1000
&
10的补码:0000 1010
=
结果的补码:0000 1000
|(位或)
有1则1,全0则0
8 | 10 == 10
8的补码:0000 1000
|
10的补码:0000 1010
=
结果的补码:0000 1010
^(异或)
不同为1,相同为0
~(取反)按位取反0-1
~15 == -16
15的原码、反码、补码:0000 1111
~之后的补码:1111 0000
负数的补码-1得到负数的反码:1111 0000 - 0000 0001 = 1110 1111
除符号位按位取反得到负数原码:1001 0000
<<(左移)
左移几位,右边补几个0
10 << 2(公式:10*2^2 = 10 *4 = 40)
00001010 ==0010 1000 = 40
>>(右移)
右移几位,左边补几个符号位(0-1)
8 >> 2 (公式:8/2^2 = 8/4 = 2)
0000 1000 == 0000 0010
4. 关系运算符
关系运算符就是用来比较它们的大小的
> < >= <= == !=
1<x<5(这种形式不允许出现)=>x>1 &&x < 5
5. 赋值运算符
= += -= *= /=%=
a+=3;=>a = a+3
6. 三目运算符(条件运算符)
格式:
表达式1?表达式2:表达式3
运算法则:
先判断表达式1是否成立,如果成立就执行表达式2;不成立的话就执行表达式3
int num = 3, sum = 5;
int ret = num < sum ? num++ : ++sum;
printf("%d\n", ret); // 3
运算符优先级
关于运算符优先级的口诀:
单目运算符 ! ~ ++ --
算术运算符 * / % + -
移位运算符 << >>
关系运算符 < <= > >= == !=
位与运算符 &
异或运算符 ^ |
逻辑运算符 && ||
条件运算符 ?:
赋值运算符 = += *= /= %= ...
口诀: 单算移关与 异或逻条赋
从右向左单条赋
标识符
命名规则:
1. 是由数字、字母、下划线组成
2. 开头不能是数字
3. 不能和关键字重复
4. 见名知义
练习: x y sum a100 _aka_
3'a x*y @ b.8 while
标点符号
, ; () {} []
分隔符
换行 空格 tab
原文地址:https://blog.csdn.net/ciweic/article/details/144747241
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!