位操作符,赋值操作符,单目操作符,关系操作符

位操作符("&"按位与,"|"按位货,"^"按位异或)

都是按二进制,他们的操作数必须是整数,不能用于浮点数。

按位与&:

int a=3 0000....0011

int b=-5 1111....1011

int c=a&b

printf("%d\n",c)

输出c=3 0000....0011

总结:有0为0,全1为1

按位或|:

int a=3 0000....0011

int b=-5 1111....1011

int c=a|b

输出c=-5 1000...0101(这是补码变成原码后)

总结:全0为0,有1为1

按位异或^:

int a=3 0000....0011

int b=-5 1111....1011

int c=a^b

输出c=-8 1000....01000(补码变成原码后)

总结:相同为0,不同为1

例题:不能创建临时变量(第三个变量),实现两个数的交换。

(常规)我们会拿第三个变量作为交换媒介

int a=5

int b=3

int c=0

a=b

c=a

b=c

这里利用位操作符:

在使用之前我们需要了解:3^3=0

     3^3^5=5 3^5^3=0

异或操作符支持交换律

839afb8668674a928ad89719cbe4f119.jpg

 45478c7afa974f8cb6ecab8b7ec3743c.jpg

 单目操作符,只有一个操作数

a+b,双目操作符,"+"操作符有两个操作数

 

单目操作符

! //逻辑反操作

- //负值

+ //正值

& //取地址

sizeof //求操作数的类型长度(以字节为单位)

~ //对一个数的二进制按位取反

-- //前置、后置减减

++ //前置、后置加加

* //间接访问操作符(解引用操作符)

(强制类型转换) //强制类型转换

 

这里说明一下"~" 二进制按位取反

int a =0 0000....0000

printf("%d",~a) 1111....1111(这是补码) 

输出a=-1 1000...0001(这是原码)

 

如果要修改二进制中的0,变成1,可以让1左右移,使用移位操作符。

例:

0dc65e76a1634016bd503175ed4463e5.jpg

 要想把变的那个数字变回原来的数可以,按位取反

750553c362f045988e73adc24ea24ebc.jpg

 重点还是:按位与& 有0则0,全1为1

              按位或| 有1则1,全0为0

              按位异或^ 相同为0,相异为1

 

"++"和"--"(使用方法是一样的,这里说++)

例:先++,后使用

bd8e0912543e4731b204749e260a4272.jpg

本质上是b=加完后的a,a变成了4给了b

先使用,后++ 

8e18738eb3ff467fbc6314d5a1aa29fd.jpg

本质上是b先等于a变成3,后面a再++变成4

 

"*" 解引用操作符

*p 通过p里的地址找到它所指向的对象 

08acd03ec6f041c1b24626b71762ad43.jpg

"(类型)强制类型转换"

举例: 

4504bc2e241d4d929e75ddbc9182cf29.jpg

 

关系操作符

>,<,>=,<=,!=,==

关于"==",在比较字符串时

"abc"=="acbdef",是不行的,这里比较的是两个字符串的首字符地址

应该用库函数strcmp,头文件#include<string.h>

strcmp("abc","acbdef")==0 若相等则判断为0

若不等则判断不为0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值