左移(<<),右移(>>), (i++ 如果没有接收方,那么“先使用”,如何理解?),取余和取模一样吗?

左移:最高位丢弃,最低位补0;

右移:先判定是算术右移还是逻辑右移,判定依据:看自身类型,和变量的内容无关,判定了是算术右移还是逻辑右移,才决定最高位补什么。

1、无符号数:最低位丢弃,最高位补0(逻辑右移)

2、有符号数:最低位丢弃,最高位补符号位(算术右移)

 下面我们来分析一下截取的反汇编的一段核心代码:

 结论:i++完整的含义是先使用,再自增,如果没有变量接收,那么直接自增(或者所谓的使用,就是读取进寄存器)

取整:

取整一共有四种方法,分别是:

1、round(向0取整)(C语言默认的取整方式)

2、floor(向负无穷大取整)

3、ceil(向正无穷大取整)

4、trunc(四舍五入取整)

下面是对应的一张表:

 可以发现,某些数据的取整方法虽然不同,但是取整之后的结果是有可能相同的。

结论:浮点数(整数/整数)是有多种取整方式的。

取模&取余:

取模&取余概念:如果a和d是两个自然数,d非零,可以证明存在两个唯一的整数q和r,满足a=q*d+r且

0<=|r|<|d|,其中q被称为商,r被成为余数。

在C语言中,-10%3=-1(因为C语言采用的是向0取整,所以是商3余-1(负余数))

但是在python中,-10%3=2(原因是python中采用了向负无穷取整,所以是商-4余2(正余数))

取余和取模一样吗?

其实这两个并不是严格上的相等。

本质1取整:

取余:尽可能让商,进行向0取整。

取模:尽可能让商,向负无穷方向取整

故:

C语言中的%,本质其实是取余。

python中的%,本质其实是取模。

理解链:

对于任意一个大于0的数,对其进行0向取整和负无穷取整,取整方向是一致的,故取余等价于取模。

对任何一个小于0的数,对其进行0向取整和负无穷取整,取整方向是不一致的,故取余不等价于取模。

同符号数据相除,得到的商一定是正数,即大于0!故在对其商进行取整的时候,取模等价于取余

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值