C语言----词法符号

目录

关键字

运算符

[1. 算数运算符:](#1. 算数运算符:)

/:整数相除,向下取整

%:取余只能用于整数运算

++:

赋值运算:

打印语句:

独立成句:

--:

[2. 逻辑运算符](#2. 逻辑运算符)

&&(逻辑与)

||(逻辑或)

!(逻辑非)

截断法则:

3.位运算符

&(位与)

|(位或)

^(异或)

~(取反)按位取反0-1

<<(左移)

>>(右移)

[4. 关系运算符](#4. 关系运算符)

[5. 赋值运算符](#5. 赋值运算符)

[6. 三目运算符(条件运算符)](#6. 三目运算符(条件运算符))

格式:

运算法则:

运算符优先级

标识符

标点符号

分隔符


关键字

概念:由系统预定义(提前定义好的)的具有特殊功能的词法符号

分类:

存储类型: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

  1. ++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

相关推荐
小智老师PMP25 分钟前
零基础能不能考PMP?零基础专属学习路径+全套扶持体系
学习·算法·职场和发展·软件工程·求职招聘·敏捷流程
Dillon Dong34 分钟前
【风电控制】FPGA采集Vdc的ADC增益系数解析——从数字码到实际电压的桥梁
算法·fpga开发·变流器·风电控制
TDengine (老段)41 分钟前
TDengine 压缩编码机制 — 双层压缩架构与类型特化算法
大数据·数据库·物联网·算法·时序数据库·tdengine·涛思数据
不会就选b42 分钟前
数据结构之顺序表和链表的OJ题(上)
数据结构·链表
妄想出头的工业炼药师2 小时前
LVIO鲁棒
算法·开源
aini_lovee2 小时前
MATLAB 图像修复 — 偏微分方程方法
算法
Cthy_hy2 小时前
Python算法竞赛:排列组合核心用法
开发语言·python·算法
大圣编程2 小时前
面向对象深度理解
java·开发语言·算法
爱喝水的鱼丶2 小时前
SAP-ABAP:SAP 简单报表输出开发系列(共6篇) 第四篇:SAP 报表异常处理机制:数据校验与消息提示规范落地
开发语言·数据库·学习·算法·sap·abap
wabs6663 小时前
关于贪心算法【划分字母区间】的问题总结(C++语法)
算法·贪心算法