5.15_操作符详解1

1、操作符分类:

算术操作符   +   -   *   /   %

移位操作符   <<   >>

位操作符    &   |   ^

赋值操作符   =   +=  -= ......

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号表达式

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

2、算术操作符 

+   -    *    /    %

/    整型的除法   1/2-->0  得到的是商

     浮点型的除法   1.0/2-->0.5    1/2.0-->0.5    1.0/2.0-->0.5

%  计算的是整除后的余数   7%2  就是7除2商3余1,最后得到的结果是1,%这个取模操作符的两        端必须是整数。

3、移位操作符

<<   左移操作符

>>   右移操作符

注:移位操作符的操作数只能是整数

移位操作符,移动的是二进制位

给一个值13,可以用二进制,八进制,十进制,十六进制等来表示。

十进制里面的数字每一位都是由0~9来组成

二进制里面只有0和1

八进制是0~7组成

十六进制是由0~9和a~f来表示,a~f就是10~15

整数的二进制表示有3种:

原码

反码

补码

规定:

正的整数的原码、反码、补码相同;

负的整数的原码、反码、补码是要计算的。

例:

7

二进制序列:111 (但其实不够)

7是个整数,整型占4个字节,4个字节就是32比特位(bit),一个字节8个bit,所以

二进制序列应该是:00000000000000000000000000000111

因为7是整数,所以高位是0,0表示他是整数,最高位就是符号位,(最高位是0,表示他是整数,最高位是1,表示他是负数)

所以这个00000000000000000000000000000111就是7的原码,照着7的这个值直接写出来的这个数值就是她的原码,因为正的整数的原码、反码、补码相同,所以也可以认为这个00000000000000000000000000000111是7的反码,补码。

7

00000000000000000000000000000111   --原码

00000000000000000000000000000111   --反码

00000000000000000000000000000111   --补码

-7

10000000000000000000000000000111   --原码    (最高位1表示负数)

负数的反码:原码的符号位不变,其他位按位取反

111111111111111111111111111111111000   --反码

负数的补码:反码的基础上直接+1

111111111111111111111111111111111001   --补码

整数在内存中存储的是补码

 正数  左移操作符: 

左移操作符的计算规则:左边丢弃,右边补0。

a的值是不变的。 

负数  左移操作符:

 那通过补码算到原码(这是负数的)

补码-1之后再取反

111111111111111111111111111111110010   --补码

111111111111111111111111111111110001   --反码

10000000000000000000000000001110   --原码 

-(1*(2^3)+1*(2^2)+1*(2^1)+1*(2^0))=-(8+4+2+0)=-14

左移有乘2的效果 

右移操作符:

(有两种,算术移位和逻辑移位)

算术移位:右边丢弃,左边补原符号位

逻辑移位:右边丢弃,左边补0

正数现在好像测不出它现在用的是算术移位还是逻辑移位。

那怎么测它是是算术移位还是逻辑移位,放个负数就明白了。

a=-7

移位之后,如果是算术移位最高位补的就是1,是负数

如果是逻辑移位最高位补的就是0,变成是正数了。

111111111111111111111111111111111100   --补码

111111111111111111111111111111111011   --反码

10000000000000000000000000000100  --原码   -(1*2(2^2))=-4

说明vs2022编译器采用的是算术右移。

警告:

对于移位运算符,不要移动负数位,这个标准是未定义的。  (int b=a>>-2;  //这个是不行的)

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值