从零开始学习C语言日记——DAY28操作符详解

一、操作符的种类

算术操作符

位移操作符

位操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号操作符

下标引用、函数调用和结构成员

  • 算术操作符

+   -    *    /    %

加  减  乘   除  取模

例如

3除于5

 

为什么不是0.6呢

3除5的时候都是整数,除法的执行是整数除法

3除5不够除答案就是商0余3

如果改为float类型可不可以呢

 

可以看到结果仍然是0

 

当其中一个值改为浮点数的时候,执行的就是浮点数的除法

取模

 

当7模3就等于是

7除3=2......1

求模就相当于求余数所以等于1

取模的两端必须是整数

移位操作符

>>    <<

左移操作符

 

把2传到a里,4是整型int类型为4个字节32个比特位

此时里面的内容为

00000000 00000000 00000000 00000010

左移

溢出的0|  00000000 00000000 00000000 0000010   0《补的0

所以答案为4

右移操作符

1.算术右移

右边丢弃,左边补原符号位

2.逻辑右移

右移丢弃,左边补0

拿正数不管怎么样去测结果都一样,因为正数的符号位是0,负数的符号位是1

负数:-1存在内存中

对于正数来说以下都是相同的,负数用以下方法计算

整数的二进制表示形式:其实有3种

源码:直接根据数值写出的二进制序列就是原码
反码:原码的符号位不变,其他位按按取反就是反码

补码:反码+1,就是补码

-1:

源码:10000000 00000000 00000000 00000001

反码:11111111 11111111 11111111 11111110

补码:11111111 11111111 11111111 11111111

 

运行结果发现还是负1所以发现当前右移操作符使用的是算术右移。

因为右移之后补的还是符号位1,所以为负数结果也还是

11111111 11111111 11111111 11111111

位操作符

&   |    ^

1.按位与

2.按位或

3.按位异或

按位与

 

A=00000000 00000000 00000000 00000011    =    3

B=00000000 00000000 00000000 00000101    =     5

按位与=有0出0全1出1\

C=00000000 00000000 00000000 00000001    =     1

按位或(二进制位)

 

A=00000000 00000000 00000000 00000011    =    3

B=00000000 00000000 00000000 00000101    =     5

按位与=有1出1全0出0\

C=00000000 00000000 00000000 00000111    =     7

按位异或

 

A=00000000 00000000 00000000 00000011    =    3

B=00000000 00000000 00000000 00000101    =     5

按位与=相同为0,相异为1

C=00000000 00000000 00000000 00000110    =     6

练习

不使用新的变量使得原来a=3,b=5,变为a=5,b=3

 

第一步        第二步        第三步

A=011         A=110         A=110

B=101         B=101         B=011

a=110         B=011         C=101

练习;编写一个程序:求一个整数储存在内存中的二进制中1的个数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值