自学内容网 自学内容网

C语言----词法符号

目录

关键字

运算符

1. 算数运算符:

/:整数相除,向下取整

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

++:

赋值运算:

打印语句:

独立成句:

--:

2. 逻辑运算符

&&(逻辑与)

||(逻辑或)

!(逻辑非)

截断法则:

3.位运算符

&(位与)

|(位或)

^(异或)

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

<<(左移)

>>(右移)

4. 关系运算符

5. 赋值运算符

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

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)!