首先必须要明确的是:负数在计算机中都是以补码来表示的。 负数的位运算也是在补码上进行的。

与运算

-2&-3 =-4
原码 10000010 10000011
取反 11111101 11111100 (反码)
加一 11111110 11111101 (补码)
与运算结果 11111100

这个结果是多少呢?首先看最高位是1,说明这是一个负数的补码表示,我们把它转化成十进制看看是多少。
负数的补码转化为原码:
符号位不变,其余为取反:10000011
然后再加1:10000100
10000100是-4的原码表示,所以-2&-3的结果是-4

位运算

负数的位运算尤其需要注意:负数右移运算在左侧补1,而正数是补0。

-5 >> 1 = -3
原码:10000101
反码:11111010
补码:11111011
右移一位:11111101

这个结果是多少呢?首先看最高位是1,说明这是一个负数的补码表示,我们把它转化成十进制看看是多少。
负数的补码转化为原码:
符号位不变,其余为取反:10000010
然后再加1:10000011
10000011是-3的原码表示,-5 右移一位是-3,相当于除以2,向下取整。
但是需要注意的是,5右移一位是2,也是相当于除以2,向下取整。

5 >> 1 = 2
原码:10000101
右移一位:10000010
10000010转化为十进制是2

还有一点需要十分注意就是-1和1的右移运算:

1 >> 1 = 0
原码:00000001
右移一位:00000000

00000000转化为十进制是0

-1 >> 1 = -1
原码:10000001
反码:11111110
补码:11111111

这个结果是多少呢?首先看最高位是1,说明这是一个负数的补码表示,我们把它转化成十进制看看是多少。
负数的补码转化为原码:
符号位不变,其余为取反:10000000
然后再加1:10000001
10000001是-1的原码表示。
所以可以知道:1右移一位是0,-1右移一位仍然是-1。-1的右移运算永远是-1.

负数的二进制表示与位运算相关推荐

  1. 小技巧 ----- 通过二进制串的位运算进行一维指数型枚举

    一维指数型枚举 使用场景 给定n个水平方格 每个方格里面可以放1或0 那么所有存放的情况一共有2n2^n2n种 枚举出所有情况 二进制串的位运算结论 给定一个二进制串,如101011 从左到右可以规定 ...

  2. c++ 输出二进制_【位运算与状态压缩】二进制的魅力

    [引言] 今天讲讲位运算与状态压缩.         位运算涉及系统底层的运算,骚操作很多:状态压缩则是编程中空间优化的有效手段,应该说两者本身其实并没有太直接的联系,但是在实际使用时会有一定的结合, ...

  3. 基础编程题之二进制插入(位运算)

    题目 题目的意思是给出n和m的二级制,要求把m的二进制数字插入到n的二进制的第j位到第i位(从右向左),它保证n的第j位和第i位均为0 这道题我在开始做的时候,没有注意到它保证了n的第j位和第i位均为 ...

  4. LeetCode 868. 二进制间距(位运算)

    1. 解题 给定一个正整数 N,找到并返回 N 的二进制表示中两个连续的 1 之间的最长距离. 如果没有两个连续的 1,返回 0 . 输入:22 输出:2 解释: 22 的二进制是 0b10110 . ...

  5. 小技巧 ----- 通过二进制串的位运算进行二维指数型枚举

    二维指数型枚举 题目: 给定4x4矩阵(每个元素为1或0) 枚举出所有情况,在矩阵元素为1的位置执行turn()方法 思路: 把4x4方格看作一个一维的水平长度为16的方格 即现在需要枚举一个长度为1 ...

  6. 【牛客 - 303D第十五届浙江大学宁波理工学院程序设计大赛(同步赛)】Campaign(二进制枚举,位运算,暴力,思维)

    题干: 星际争霸(StarCraft)单人战役模式中有很多供人游玩的任务关卡. tokitsukaze新开始了一关单人战役模式下的任务.在这场战役中,你要作为指挥官指挥克鲁普星区的艾伦人类(Terra ...

  7. Java位运算,负数的二进制表示形式,int类型最大值为什么是2的31次方-1

    目录 二进制中负数怎么表示? Java位运算 按位运算 移位运算 int类型的取值范围是多少? 二进制中负数怎么表示? 在进行位运算之前,先看看负数的二进制形式在计算机中是如何表示的,在计算机中所有的 ...

  8. 为什么地磅的读数有进制么_谈谈二进制(三)——位运算及其应用

    0. 概要 前两篇文章我们了解了二进制的基本原理(谈谈二进制(一))以及二进制的四则运算(谈谈二进制(二)),本篇我们一起来看看二进制的位运算.先来看一下有哪些位运算: 上表中列出了我们编程语言中的所 ...

  9. java 二进制位运算_Java中的二进制与位运算

    大家在阅读一些算法或者一些开源框架的时候,总会见到~,>>,>>>,|这种大量的位运算,因此想要读明白 这部分代码,对于计算机的二进制操作以及位运算是必须要了解的,那么本 ...

最新文章

  1. layui停止更新_layui 关闭当前窗口,刷新父级页面
  2. pandas编写自定义函数高亮显示(highlight)dataframe中的指定内容(数值)(highlighting a specific values or content of a panda
  3. 删除rabbitmq的队列和队列中的数据
  4. android 如何终止线程
  5. C++全局变量的声明和定义
  6. 【Away3D代码解读】(一):主要类及说明
  7. 学C++的室友手握这个项目,面试稳了
  8. 使用预编译库PREBUILT LIBRARY官方说明
  9. element-plus Radio 单选框点击失效 无法切换问题
  10. Html与JS正则表达式测试代码
  11. 哲学家就餐问题 C语言实现
  12. k-means 及其改进 数库
  13. php手册 mac版,PHP中文手册for mac-PHP中文手册Mac版下载 V1.0.2-PC6苹果网
  14. 如何将本地图片转成链接?
  15. Excel怎么合并两个或者多个单元格里面的内容
  16. 文件如何生成链接插入到微信公众号,如Word、Excel、Pdf等
  17. 网易乐得数据库及运维分享会
  18. cloc工具 命令行 统计代码行数
  19. 小米/红米 手机内部存储空间其它文件怎么删除内部存储空间不足
  20. GUI:简易计算器设计

热门文章

  1. Android获取系统语言(区分简体中文和繁体中文) .
  2. 积加(跨境ERP)与金蝶云星空单据集成对接
  3. LaTex插入图片的几种常用的详细方法
  4. RNN、LSTM、Seq2Seq
  5. 驱动学习----字符设备驱动框架
  6. Python 字典操作 总结
  7. python pyodbc mysql_pyodbc和mySQL
  8. 江苏工匠杯-unseping序列化,正则绕过(全网最简单的wp)
  9. element UI NavMenu 导航菜单样式修改
  10. 泛终端AI开闸放水,荣耀的5G+IoT伸展运动