首页
学习
活动
专区
工具
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>>11,-32却又是-1为什么

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

    98520

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

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

    88130

    1 什么 DevOps

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

    18110

    RAID 01、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

    数组如何随机访问元素?数组下标为什么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<3;i++)不是 for(inti=0;i<=2;i++)。...第一个直接就可以算出3-0 = 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 负负得负、正负得正、负正得正、负负得正,这就是异或门逻辑。...如果说异或门电路有点复杂,那么异或门又可以由与非门表示: (读者可以将10不同值分别代入A、B,验证异或门结果Q) 与非门的逻辑这样的: A B S 0 0 1 0 1 1 1 0 1 1 1 0...CPU内所有的运算,归根结底又都是开关的开合。从这点来看,计算机的鼻祖竟然小小的开关。 浏览器问:“CPU,这样说来你的加法器都是由众多开关实现的。

    1.9K20

    01学习nodejs(1)

    终于有点时间学习啦,今天美好的周六,早上早起去了一趟健身房,然后去喝了免费的霸王茶姬!万里木兰很不错,推荐。又要开始学习啦,家人们,学习永无止境!!!...之前学的node也忘得差不多了,而且感觉学的不扎实,因为学了就忘,表明自己没有真正的理解到,所以要来一次01的学习。 夏天终于来了,好热好热。...首先,我们要清楚一个概念,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("

    8610

    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

    为什么计算机起始时间1970年11日?

    在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年11000秒为界限,数值为0,用户把时间调整到1969年12月31日16时00秒,系统就要出现负值的时间。

    1.3K20

    2022-11-28:给定两个数组A和B,比如 A = { 0, 1, 1 } B = { 1, 2, 3 } A = 0, B = 1,表示01

    2022-11-28:给定两个数组A和B,比如 A = { 0, 1, 1 } B = { 1, 2, 3 } A0 = 0, B0 = 1,表示01有双向道路 A1 = 1, B1 = 2,表示1到...2有双向道路 A2 = 1, B2 = 3,表示1到3有双向道路 给定数字N,编号从0~N,所以一共N+1个节点 题目输入一定保证所有节点都联通,并且一定没有环 默认办公室0节点,其他1~N节点上,每个节点上都有一个居民...代码如下: use std::iter::repeat; fn main() { let mut a1 = vec![0, 1, 1]; let mut b1 = vec!...[2, 0, 3, 1, 6, 5, 4, 0, 0]; let n2 = 9; println!...// a为头的树,所有的居民要向a来汇聚 // cost[a] : 所有的居民要向a来汇聚,总油量的耗费 let mut cost: Vec = repeat(0).take

    38130

    什么Flink CEP (1)

    基本概念 事件定义 简单事件 简单事件的特点基本上唯一事件,可以简单的通过数据就可以观察到事件。不存在与需要查看多个事件之间的关系而能够判定的事件规则。...时序关系 事件与事件之间都会存在时序关系,例如:A事件发生时B事件的状态随A事件的改变改变。 聚合关系 个体事件的聚合关系,例如当A事件的次数发生30次以上则触发告警信息。...层次关系 例如A事件B事件的父类,从A类事件到B类时间具体化的。 依赖关系 例如A事件的产生依赖与B事件的触发。否则不会触发A事件。则说明A事件依赖与B事件的触发。...事件处理 复杂事件处理目的通过相应的规则引擎来对实时数据做相应的数据处理策略。这些策略包括了推断、根因、决策、预测等内容。...基于此基本都是通过CEP来实现用户的信用评分。例如实时导入用户的相关信息, 年龄,身份证号,芝麻信用分等等。规则或为: 年龄 < 65 ,有房产 ,无不良债务等 ?

    75830
    领券