首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么-1 >> 1是-1?而1 >> 1是0!

为了回答这个问题,首先需要了解位运算中的右移操作(>>)和左移操作(<<)。

右移操作(>>)是将一个数的二进制表示向右移动指定的位数。在右移操作中,最左边的位将被丢弃,同时在最右边补充相同的位数。

左移操作(<<)是将一个数的二进制表示向左移动指定的位数。在左移操作中,最右边的位将被丢弃,同时在最左边补充相同的位数。

现在我们来解释为什么-1 >> 1是-1,而1 >> 1是0。

首先,我们需要了解负数的二进制表示。在计算机中,负数通常使用补码表示。补码是将负数的绝对值的二进制表示取反,然后再加1。

例如,-1的二进制表示为1111(假设使用4位表示)。现在我们将-1右移1位,即进行-1 >> 1操作。

在右移操作中,最左边的位将被丢弃,同时在最右边补充相同的位数。因此,-1右移1位后的结果为1111,仍然是-1的二进制表示。

对于1 >> 1,1的二进制表示为0001。右移1位后,最右边的位被丢弃,同时在最左边补充0。因此,1右移1位后的结果为0000,即0的二进制表示。

综上所述,-1 >> 1是-1,而1 >> 1是0。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,我无法提供相关链接。但是,腾讯云作为一家知名的云计算服务提供商,提供了丰富的云计算产品和解决方案,可以根据具体需求进行选择和使用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

代码里-3>>1是-2但3>>1是1,-32却又是-1,为什么?

随后这位同学公布了答案:右移运算是向下取整,除法是向零取整。这句话对以上现象做了很好的总结,可是本质原因是什么呢? 我一直以为-3>>1的结果是-1。所以打算思考一下这个问题。...,即0x3按位取反之后0xfffffffc再加一,即为0xfffffffd 为什么会有这样的“奇怪”的补码形式呢?...此处我们主要看有符号数除法和无符号数除法的区别,而汇编篇幅太长,在此我只截取有符号数除法中有,而无符号数除法不存在也不需要的那部分代码,这样就能看到-3/2和3/2的区别。...有符号数除法一开始的处理: //此处被除数是r0,除数是r1 : cmp r1, #0 //判断r1和0的关系,并更新cpsr寄存器 beq.w 1098a 1之后再赋值成-1 还记得那个神奇的数字0x80000000(-2147483648)吗,0x80000000乘以-1依然是0x80000000如果是这个数字除以

1.1K20
  • 1+1=2是如何运算的

    计算机,计算两个字才是关键,那么作为JVM也需要去进行计算,最简单的计算莫过于加减乘除,下面看一下加减乘除的具体指令有哪些,文章的结尾我们也会给出1+1=2的运算过程。...如果有两个同样接近的精确值,那么最低有效位为0的优先(最接近数舍入模式)。...float和double窄化成整数类型,需要采取向零舍入(结果朝0的方向进行舍入)的规则,如果是10.9,转换成int以后就是10,如果浮点数转换后超过了int或者long的范围,那么会根据向零舍入后的数据的符号返回其最大或最小的正数...,这里特别强调是正数。...1+1=2 public class ClassTest { public int add(int a, int b) { return a + b; } } 我们看一反编译后的

    99820

    为什么数组下标从 0 开始?而不是 1?

    鱼皮最新原创项目教程,欢迎学习 大家好,我是鱼皮。很多小伙伴初学编程的时候都被元素下标折磨过,为什么很多编程语言要把 0 作为第一个下标索引,而不是直观的 1 呢?...,那是否有理由选择其中的一种而不是另一种?...2 个不等式来说,下界小于序列中的最小值,这会出现一个问题,比如我们的连续序列是 [0,1,2,3,4] 那么按照第 2 个不等式的写法,不等式的左边就是 -1,-1 是非自然数,而我们需要表示的连续序列是自然数序列...遵循不等式 1 的规则: 当从下标 1 开始时,下标范围 1 ≤ i 1 当从下标 0 开始时,下标范围 0 ≤ i < N 哪个更优雅?...Dijkstra 是这样解释的:从下标 0 开始能够给出更好的不等式,因为元素的下标就等于序列中它前面的元素数(或者说 “偏移量”)。 问题解决!

    90430

    RAID 0、1、5、1+0总结

    RAID(由操作系统来实现,生产环境下一般不采用,因为是基于系统,所以一旦系统挂掉了,数据就挂了),另一种是硬RAID(使用的是RAID卡,也叫阵列卡等的一种独立于系统之外的卡,当系统挂掉之后可以保证磁盘数据的安全性...RAID 0:(String 条带模式) ?...要求:需要3块及以上硬盘 优势:兼顾读写速度和数据安全,其中一块磁盘挂掉时,可以保证数据不被损坏;(需要注意的是,只允许坏一块盘,并且坏盘要及时更换) 磁盘利用率=[(n-1)/n] * 2/3 RAID...1+0 先创建RAID 1,在RAID的基础上创建RAID 0 优点:数据安全性好,只要不是一个RAID 1上的2个硬盘同时损坏,都不影响数据的正常读写,数据恢复快 缺点:写性能较RAID 0+1 差一些...RAID 0+1 先创建RAID 0,在RAID 0 的基础上再创建RAID 1 优点:性能上考虑的话,RAID 0+1要更有优势一些,RAID 0+1写入速度更快一些,读取速度和RAID 1+0 一样

    1.3K10

    1 什么是 DevOps

    什么是 DevOps DevOps 是一种协作方法,在软件开发和运营团队之间架起了一座桥梁。它强调有效沟通、责任分担以及工具和实践的整合,以简化软件交付流程。...DevOps 三大核心 自动化 自动化是 DevOps 的核心。它包括使用工具、脚本和流程来自动化整个软件开发生命周期中的手动和重复性任务。...可扩展 可扩展是 DevOps 的另一个关键核心。它涉及处理增加的工作负载、用户需求和增长的能力。学习 DevOps,主要学习如何用它使组织利用云计算和虚拟化技术实现可扩展性。...基础设置 基础设施是指支持软件开发、部署和运行所需的底层硬件、软件、网络和服务。采用基础设施即代码(IaC)的概念,将基础设施配置视为受版本控制的代码。...DevOps 为何重要 从以下几个原因,学习 DevOps 对于提升我们工程能力是大有裨益的。 增强协作 DevOps 促进了开发和运营团队之间的协作与沟通。

    19910

    1 什么是 Git

    1 什么是 Git Git 是一个免费、开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。...仓库权限私有与开源区别在于,仓库的大小(开源为1G,私有为500M)和协作人数(开源不限,私有限制 5 人以下) 新建仓库完成后,进入仓库,获取仓库地址。...为什么要有暂存区 为什么要有暂存区,通过工作目录直接提交到本地仓库不就OK了!那么暂存区存在有什么作用,存在的意义是什么? 每一个功能应该单独做成一次提交,这样可以保证提交历史的清晰。...否则,当你想要回滚历史的时候,你会无所适从,根本分不清每个版本包含了哪些功能,修复了哪些 bug,而暂存区的作用就是为了,可以选择提交,比如你在开发 B 功能的时候,发现 A 功能还存在 Bug,这时候就需要先修复...分支的命名规范 + 大家约定俗成的东西 1.

    8800

    数组是如何随机访问元素?数组下标为什么从0开始,而不是1?

    数组是如何随机访问数组元素? 数组是如何实现根据下标随机访问数组元素的吗? 例如: int[]a=newint[10] 1,计算机给数组a[10],分配了一组连续的内存空间。...datatype_size:数组中每个元素的大小,比如每个元素大小是4个字节。 1,数组使用二分法查找元素,时间复杂度是O(logn)。 2,根据下标随机访问的时间复杂度是O(1)。...为什么数组要从 0 开始编号,而不是1? 从偏移角度理解a[0] 0为偏移量,如果从1计数,会多出K-1。增加cpu负担。...为什么循环要写成 for(inti=0;i而不是 for(inti=0;i0 = 3 有三个数据,而后者 2-0+1个数据,多出1个加法运算,很恼火。

    6.3K10

    JS是如何计算 1+1=2 的?

    看来v8并不知道1+1为什么等于2,v8为了执行js快一点,大量占用了内存空间,是用”空间换时间”的方法,博得了“v8引擎执行快”的美名。具体为什么1+1等于2,还需要问问CPU。...加法器是由半加器组成的,而半加器又是由一个异或门加一个与门组成的,如下所示是一个半加器: (在上图中,A、B是输入,S是结果,C是进位结果。)...学过数学很容易理解,异或门的逻辑是这样的: A B C S 0 0 0 0 1 0 0 1 0 1 0 1 1 1 1 0 负负得负、正负得正、负正得正、负负得正,这就是异或门逻辑。...如果说异或门电路有点复杂,那么异或门又可以由与非门表示: (读者可以将1、0不同值分别代入A、B,验证异或门结果Q) 与非门的逻辑是这样的: A B S 0 0 1 0 1 1 1 0 1 1 1 0...而CPU内所有的运算,归根结底又都是开关的开合。从这点来看,计算机的鼻祖竟然是小小的开关。 浏览器问:“CPU,这样说来你的加法器都是由众多开关实现的。

    1.9K20

    从0到1学习nodejs(1)

    终于有点时间学习啦,今天是美好的周六,早上早起去了一趟健身房,然后去喝了免费的霸王茶姬!万里木兰很不错,推荐。又要开始学习啦,家人们,学习永无止境!!!...之前学的node也忘得差不多了,而且感觉学的不扎实,因为学了就忘,表明自己没有真正的理解到,所以要来一次0到1的学习。 夏天终于来了,好热好热。...首先,我们要清楚一个概念,nodejs并不是一种编程语言,官方的说法是: Nodejs是一个开源的,跨平台的JavaScript运行环境 Nodejs的作用 命令行 命令的结构: 常用命令: 小结:...,那么也有相应的同步方法,并且这个方法是没有回调函数的 const fs = require("fs"); fs.writeFileSync("..../日记"); ws.write("2/1 今天 xxxx \n"); ws.write("2/2 ...xxxx \n"); ws.write("2/3 ...xxxx \n"); ws.write("

    8710

    为什么计算机起始时间是1970年1月1日?

    在Java中,这个时间是1970, 00:00:00 GMT。 时间戳 一切要从Unix操作系统诞生开始说起。...时间戳修改 除了开始时间是1971-1-1而不是1970-1-1外,最初的时间戳也不是每增加1秒时间戳就变动一次,而是每1/60秒都会改变一次时间戳。...另外,Unix是在1971年发明出来的,当时的计算机系统是32位,如果用32表示有整数,那么最大值是2147483647(2^31-1)。...1970-01-01 08:00:00的显示显然是受到了时区的影响,因为中国处于东八区,所以时间会比标准时间早8小时,而标准时间应该是1970-01-01 00:00:00。...但是,IOS设备是以UTC时区(GMT时间)的1970年1月1日0点0时0秒为界限,数值为0,用户把时间调整到1969年12月31日16时0分0秒,系统就要出现负值的时间。

    1.3K20

    第 1 课:计算机是如何计算 1+1=2 的?

    V8 为了执行 JS 更快,大量占用了内存,是用「空间换时间」的方法,在计算机世界博得了「V8 引擎执行 JS 就是快」的美名。具体为什么 1+1 等于 2,还需要问问 CPU。...从计算机角度讲,比如 0101 这 4 个 bit,依次代表 4 个路口,每个路口有两个岔,0 向左转,1 向右转,这样 0101 一路走下来不就知道是哪个职员负责了。...加法器并不知道 1+1 等于几,加法器是由半加器累加组成的,而半加器是由一个异或门加一个与门组成的。如下所示是一个半加器: ? 注:在上图中,A、B 是输入,S 是结果,C 是进位结果。...而一个与非门简单电路的物理设计是这样的: ? 如上所示,它是由开关设计实现的。x、y 是两个开关,其开状态为 1,关状态为 0。x、y 相当于与非门中的 A、B。...笔者道,这下明白了,CPU 并不知道 1+1 等于 2,之所以 1+1 能算出等于 2,是人类在设计 CPU 的时候赋能给它的。而 CPU 内所有逻辑的运算,归根结底又都是开关的开合。

    1.9K20

    1. 什么是Maven

    1. Maven的概念 它是一个一键式的自动化的构建工具....Maven 是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用,Maven 是一款在大型项目开发过程中不可或缺的重要工具。 2....为什么要使用Maven 首先 , Maven可以自动的帮助我们下载jar包....其次可以进行多个项目同时的编译运行.还有在开发的过程中需要进行测试运行,Maven提供了自动化的测试插件帮助我们进行项目测试功能的运行.最后项目是需要进行资源文件,配置文件的整合,来进行打包和部署,Maven...项目的构建过程 构建(build)是面向过程的(从开始到结尾的多个步骤),涉及到多个环节的协同工作。 ​ ​ 构建过程的几个重要环节: 清理:将上次编译的结果删除,为下一次编译做准备.

    11510
    领券