小萌新的C语言——词法符号

词法符号

目录

词法符号

算术运算符

自增自减

关系运算符

逻辑运算符

与或非

​编辑 位运算符

& | ^

左移

右移

清0操作

置1操作

逗号运算符

三目运算符 

一目运算符

二目运算符

 三目运算符

标点符

取地址符

&

取内容符

*

 分隔符

//

/**/

 求字节符

sizeof

标识常量符


算术运算符

+(加)

-(减)

*(乘)

/(除)

%(取余)

++(自增)

--(自减)

自增自减

自增(自减)分为:前++(--)和后++(--) 

例子:

#include <stdio.h>

int main(int argc, char *argv[])
{ 
    int a = 10;
    int b = a++ + ++a;
    printf("%d\n",b);

    return 0;
} 

//注意:前++(--)会等所有值加(减)完才进行赋值

例子:

 结果:

关系运算符

>(大于)


< (小于)

==(相等于)

>=(大于等于)

<=(小于等于)

!=(不相等于) 

逻辑运算符

与:&&

//全真为真、有假为假

或:||

//全假为假、有真为真

非:!

//真假互换
 

与或非

例子:

与:&&                                或:||                                非!

1 && 1 = 1                           1 || 1 = 1                          ! 1 = 0

1 && 0 = 0                           1 || 0 = 1                          ! 0 = 1

0 && 1 = 0                           0 || 1 = 1

0 && 0 = 0                           0 || 0 = 0

//注意:在使用&&(||)时要注意好短路问题

与(&&)前面为真时,后续的将不执行;

或(||)前面为假时,后续的将不执行;

例子:

#include <stdio.h>

int main(int argc, char *argv[])
{ 
    int a = 1;
    if(a != 1  || a+10)
    {
        printf("a短路:%d\n",a);
    }

    return 0;
}

结果:

因为a==1,条件中a!=1为假根据短路法则或(||)只要前面条件为假时,后续条件不执行

 位运算符

//每一位都要运算

位与:&

//全1为1,有0为0;

位或:|

//全0为0,有1为1;

取反: ~

//0和1互换

异或:^

相同为0,相异为1;

左移: <<

右移: >>

& | ^

例子(& | ^):

位与:&                                位或:|                             异或:^

01 & 10 = 00                      01 & 10 = 11                     01 & 10 = 11 

11 & 00 = 00                      11 & 00 = 11                      11 & 00 = 11  

11 & 01 = 01                      11 & 01 = 11                      11 & 01 = 10

00 & 01 = 00                      00 & 01 = 01                     00 & 01 = 01

左移

例子(左移):

正数:左移时直接往左边进行左移

int 10 <<3

第一步:十进制转二进制    :10 = 0000 1010

第二步:左移                      :0000 1010 (<<3) ==> 01010 0000

第三步:二进制转十进制    :0101 0000 = 80

10左移3位后等于80

//注意:负数移动时移动的是补码,补码移动后又变为原码,所以我们要转换2次

(补码 = 原码取反+1)//计算机储存是以补码的形式存储的

负数:左移时补码往左边进行左移

int -10 <<3

第一步:十进制转二进制                    :-10 = 1000 1010(原码)

第二步:转为补码(取反)                :1000 1010 = 1111 0101

第三步:转为补码(取反+1)            :1000 1010 = 1111 0110

第四步:左移后补码变为原码            :1111 0110 (<<3) ==> 1011 0000(原码)

第五步:转为补码(取反)                :1011 0000 = 1100 1111

第六步:转为补码(取反+1)            :1100 1111 = 1101 0000

第七步:计算                                      :1101 0000 = -80

-10左移3位后等于-80

右移

例子(右移):

//注意:右移分有符号和无符号,无符号与左移相当,有符号移动的为符号位

无符号:右移时直接往右边进行右移

unsigned int 10 >>3

第一步:十进制转二进制    :10 = 0000 1010

第二步:右移                      :000 1010 (>>3) ==> 0000 0001

第三步:二进制转十进制    :0000 0001 = 1

10右移3位后等于1

//注意:负数移动时移动的是补码,补码移动后又变为原码,所以我们要转换2次

(补码 = 原码取反+1)//计算机储存是以补码的形式存储的

有符号:右移时补码往右边进行移动时移动的是符号位

int -10 >>3

第一步:十进制转二进制                    :-10 = 1000 1010(原码)

第二步:转为补码(取反)                :1000 1010 = 1111 0101

第三步:转为补码(取反+1)            :1000 1010 = 1111 0110

第四步:左移后补码变为原码            :1111 0110 (>>3) ==> 1111 1110(原码)

第五步:转为补码(取反)                :1111 1110 = 1000 0001

第六步:转为补码(取反+1)            :1000 0001 = 1000 0010

第七步:计算                                      :1000 0010 = -2

-10右移3位后等于-2

清0操作

m& ~(1<<n)//让m的第n位清0

例子(清0):

000 0010 &= ~(1<<3)//让她的第3位清0;

第一步:让1左移3位后取反                        :0000 1010 ~(1<<3) ==> 0000 0010

第二步:将清0前的值和清0后的值相&       :0000 1010 & 0000 0010 ==> 0000 0010

  完成  :完成对第三位清0                          :0000 0010 

置1操作

m|(1<<n)//让m的第n位置1

000 0010 |=(1<<2)//让她的第2位置1;

第一步:让1左移2位                                 :0000 1010 (1<<2) ==> 0000 1110

第二步:将置1前的值和置1后的值相|       :0000 1010 | 0000 1110 ==> 0000 1110

  完成  :完成对第二位置1                        :0000 1110 

    

逗号运算符

赋值时只看最后一次赋值给变量;

#include <stdio.h>

int main(int argc, char *argv[])
{ 
    int a = (12, 13, 56, 90, 100);
    printf("逗号运算只看最后一次赋值:%d\n",a);

    return 0;
} 

结果: 

三目运算符 

一目运算符

一目:只有一个操作对象的运算符

例如:!、~等;

二目运算符

 二目:有两个操作对象的运算符

例如:+、-、*、/等;

 三目运算符

 三目:有三个操作对象的运算符

一般形式:

(表达式1)   ?(表达式2) :(表达式3);

执行逻辑 如果(表达式1)为真,执行(表达式2),为假,执行(表达式3);

//用法类似于if 

标点符

;        ————(分号),表示一个语句的结束

()       ————(小括号),作用优先级,函数的标志,用来装表达式

{}       ————(大括号),表示一个函数体,括起来的都是该函数的代码

[]       ————(中括号),变址符,一般用于数组

<>     ————(尖括号),般用于库头文件的引用

" "      ————(双引号),括起来的一定是字符串,自定义头文件的引用

' '       ————(单引号),括起来的一定是单个字符

,         ————(逗号),分隔符,逗号运算符

%       ————(百分号),取余,表示输出格式类型

\         ————(反斜杠),转义字符

:         ————(冒号),三目运算符,选择语句

?        ————(问号),三目运算符

!         ————(感叹号),非

取地址符

&

 //注意(取地址符)&*(取内容符)互为逆运算;

例如:&a,获取a变量的地址

取内容符

*

//解引用

取地址上的内容

 分隔符

//注释

//

注释掉一行代码

例如:

//代码

/**/

注释掉多行代码

例如:

/*代码块*/

 求字节符

sizeof

一般形式

sizeof (对象);

可以求出对象的大小;

标识常量符

//注意:只做替换
1、常量替换
2、表达式替换
3、代码替换
4、数据类型替换
5、宏函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值