算术操作符和移位操作符

算术操作符(+ - * / %)

整除的除法1/2——> 0

浮点型除法1.0——> 0.5(至少有一个数是小数)

% 计算的是整除后的余数,两端必须是整数

 

移位操作符(左移<< 右移>>)

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

只能对整数进行移位符操作

整数的二进制表示有三种:原码 反码 补码

整数在内存中存储的是补码,输出的是原码

正的整数的原码,反码,补码是相同的。

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

一个整数是四个字节,一个字节八个比特位

例:正数7

原码:0000........00111 有32位

第一位是符号位,符号位是0为正数,是1为负数

例:-7

原码:1000.......00111

反码:11111.......11000(除了符号位不变,其他位与原码相反)

补码:11111.....11001(反码加1就是补码)

 

左移操作符(左边丢弃,右边补0)

int a=7        0000.....0111

int b=a<<1    0 000....01110

输出a=7 b=14

3c62ff120150451ab9544e15a886f6e7.jpg

8d0b25ed10c048dc86f21cf06a08d004.jpg

 

 int a=-7      1111.....001

int b=a<<1   1 1111....0010    

                          1111....0001 变回反码-1

                          100.....1110 取反变回原码

输出a=-7 b=-14

因为这是补码,输出时要变回原码

1293689a15be4e378d7dd0e780874e8b.jpg

 6687de9e88794976a015278256b201f2.jpg

 右移操作符(①算术移位:右边丢弃,左边补原符号位 ②逻辑移位:右边丢弃,左边补0

两种选择取决于编译器)

int a=7 000...0111

int b=a>>1 000...0011 1

输出:a=7 b=3

d316d6ecd0ac4fd1b8eaa4bd2df02a9d.jpg

963d7b6ed3e644f0a8067d9e6400a91c.jpg 

 int a=-7 1111...001

int b=a>>1 1111...100 1

                     1111...011 减一变反码

                     100...100 取反边原码

输出a=-7 b=-4

4828e6796e4148a79af710071b60957b.jpg

c88b8a5c465e4e799251857e61fef3ce.jpg 

 注意:对于移位运算符,不要移动负数位(>>-1,<<-1),这个是标准未定义的。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值