右移位和除以2(C++)

起因

codeforces 1406D
(ans+d[1]+1)>>1 和 (s+a[0]+1)>>1 产生了完全不同的结果(Ac & Wa)

原因

对于正数,右移一位相当于除以2,但是负数却不同,

(-1>>1)==-1
(-2>>1)==-1
(-3>>1)==-2
(-3>>1)==-2

正数右移高位补0,负数右移高位补1.由于负数存为对应正数的补码.
一个数和它的相反数,的前面各位相反,最后一位相同(0除外),则移除最后一位,两个数各位相反,则 ( a > > 1 ) + ( − a > > 1 ) + 1 = = 0 (a>>1)+(-a>>1)+1==0 (a>>1)+(−a>>1)+1==0,即 ( − a > > 1 ) = = − ( a > > 1 ) − 1 ( a ≠ 0 ) (-a>>1)==-(a>>1)-1 (a\neq0) (−a>>1)==−(a>>1)−1(a​=0)

应用

x除以2并向下取整可以写为 ( x + 1 ) > > 1 (x+1)>>1 (x+1)>>1
x除以2并向上取整可以写为 ( ( x − 1 ) > > 1 ) + 1 ((x-1)>>1)+1 ((x−1)>>1)+1

右移位和除以2(C++)相关推荐

  1. JAVA中右移一位和除以2的区别

    关于JAVA中>>1和/2的区别(原码反码补码) 首先说明此处的讨论仅限数值上的区别 测试代码如下 package com.qiu.test; import org.junit.Test; ...

  2. 左移右移位运算_计算机硬件技术基础M2——计算机运算基础(二)

    在上一篇中,我们学习到了计算机底层的一些机器码,以及一些行业标准,这一章,我们将接着学习机器码的一些比较与相关计算. 一.浮点数表示和定点数的比较 ① 当字长相同时,浮点数表示的范围要大得多. ②浮点 ...

  3. Java移位运算符详解实例——左移位运算符、带符号的右移位运算符

    移位运算符也针对二进制的"位",它主要包括:左移位运算符(<<).右移位运算符(>>>).带符号的右移位运算符(>>). 1.左移运算符 ...

  4. C语言 >> 右移位运算符的原理和一些概念

    1.右移位于左移位不同 左移位 不管是 逻辑移位 算术移位 都是低位补0: 右移位 的 逻辑移位和算术移位不同, 算术移位高位补符号位,逻辑移位 高位补0: 右移位 使用逻辑移位的话 需要强制转换成u ...

  5. 按字节提取整形数值(按位与运算符“”、右移位运算符“”)

    输入一个十进制整数,将其转换成十六进制数输出,并提取每一字节所表示的十六进制数值逐一输出.测试数据如下: 分析:从控制台输入一个十进制整数,将其转换成十六进制数输出,接着提取其4个字节.用到按位与运算 ...

  6. python左移右移位运算_荐Python : 位运算 —— 与、或、异或、左移、右移

    Python : 位运算 -- 与.或.异或.左移.右移 位运算 位运算是把数字用 二进制 表示之后,对每一位上 0 或者 1 的运算.位运算共有 5 种运算:与.或.异或.左移.右移. 与.或.异或 ...

  7. 计算机中右移一位和除以二的区别

    二分查找中的中位数 在二分查找算法中,我们经常会写类似int mid = (left + right) / 2的操作,考虑周全一点的会写成int mid = left + (right - left) ...

  8. 右移一位和除以2的区别

    总结 n为非负数时,>> 1和/ 2的结果是一样的 n为负数且还是偶数时,>> 1和/ 2的结果是一样的 n为负数且还是奇数时,>> 1和/ 2的结果是不一样的 原 ...

  9. 【Python】位运算(按位与 、按位或 |、左移位运算符 <<(相当于乘以2)、右移位运算符 >>(相当于除以2))

    先导知识 4和8 相与 (按位相"与"): 需要将写成二进制0和1表示的形式. 当且仅当都为1时,相与 才为1. (下面的 "代码" 也进行了验证~) 4|8 ...

最新文章

  1. 「文本信息抽取与结构化」目前NLP领域最有应用价值的子任务之一
  2. new_zeros()函数的作用
  3. mac r 导出csv文件_每天学习一点R:8.数据的导入和输出
  4. MySQL中函数CONCAT及GROUP_CONCAT
  5. C++中成员函数和成员变量的隶属问题
  6. C和C++里面常见错误和异常出现怎么解决总结(不断更新)
  7. 2017.10.7 括号序列 思考记录
  8. 【Redis】Redis 乐观锁
  9. spring aop和事务同时开启带来的一些问题
  10. smali java_Android逆向——初识smali与java类
  11. java pdf 加水印
  12. 利用谷歌搜索建立自己的站内搜索引擎
  13. 一个非常naive的分数阶微积分介绍
  14. js进行txt文件下载方式或oss文件访问下载跨域解决
  15. 2017年总结和计划
  16. java ews appointment_ews-java-api学习:新建Recurring Appointment
  17. 使用ipp静态库,ipp-samples在linux下的make过程
  18. 2021年施工员-设备方向-通用基础(施工员)试题及解析及施工员-设备方向-通用基础(施工员)模拟试题
  19. 数字化工厂建设的内容主要有哪三个方面
  20. python画五角星和六角星程序

热门文章

  1. 美团高级技术专家艺涛:深度学习在搜索业务中的探索与实践
  2. Unity配置文件xxx.ini
  3. python工匠技巧系列(给变量注明类型)
  4. OpenCV技巧 | 二值图孔洞填充方法与实现(附Python/C++源码)
  5. 【Substance】Substance Painter基本制作流程
  6. 基于miu小波变换的人体步态数据检测和识别算法matlab仿真
  7. 弗洛伊德算法注意项 floyd
  8. Pytorch CNN 手写数字识别 0-9
  9. 2000-2018年融资约束SA指数计算命令和数据
  10. 平面几何--角平分线长定理