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

-1除以2如何得到-1?(按位运算>>)

-1除以2可以通过右移一位(按位运算符>>)来得到-1。

按位运算符>>是一种位运算符,用于将一个数的二进制表示向右移动指定的位数。对于有符号整数,右移操作会保留符号位,即负数仍然是负数。所以,对于-1除以2,可以使用右移一位操作来得到结果。

具体步骤如下:

  1. 将-1的二进制表示转换为补码形式。对于有符号整数,最高位为1表示负数,其余位表示数值的绝对值。-1的二进制表示为全1的补码形式,即11111111。
  2. 对补码进行右移一位操作。右移操作将所有位向右移动一位,最高位的符号位保持不变。右移一位后,补码变为11111110。
  3. 将右移后的补码转换回原码形式。对于负数,将补码减去1并取反即可得到原码。11111110减去1得到11111101,再取反得到10000010。
  4. 将得到的原码转换为十进制数。10000010的原码表示为-2。

所以,-1除以2的结果为-2。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云计算服务:https://cloud.tencent.com/product
  • 腾讯云数据库:https://cloud.tencent.com/product/cdb
  • 腾讯云服务器:https://cloud.tencent.com/product/cvm
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网:https://cloud.tencent.com/product/iot
  • 腾讯云移动开发:https://cloud.tencent.com/product/mad
  • 腾讯云存储:https://cloud.tencent.com/product/cos
  • 腾讯云区块链:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/mu
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

1+1=2如何运算

计算机,计算两个字才是关键,那么作为JVM也需要去进行计算,最简单的计算莫过于加减乘除,下面看一下加减乘除的具体指令有哪些,文章的结尾我们也会给出1+1=2运算过程。...,ddiv 求余指令:irem,lrem,frem,drem 取反指令:ineg,lneg,fneg,dneg 位移指令:ishl,ishr,iushr,lshl,lshr,lushr 或指令:ior...,lor 与指令:iand,land 异或指令:ixor,lxor 局部变量自增指令:iinc 比较指令:dcmpg,dcmpl,fcmpg,fcmpg,lcmpg 当进行除法和求余计算时,如果除数为...double -> int d2l:double -> long d2f:double -> float int或者long类型的窄化只需要将最高的几位丢弃,保留最低的N(N为转换后的数据类型长度)即可...1+1=2 public class ClassTest { public int add(int a, int b) { return a + b; } } 我们看一反编译后的

98520

1-1 Java基础-运算

1-1 Java基础-运算 什么是运算?...一个字节=8二进制 1k=1024字节 1k=1024*8二进制 运算其实就是移位运算,将内存里面的二进制进行移位 比如二进制=101向右移1 010|1 移位之后的1其实已经不被计算在内了..., 变成内存里面的垃圾 在java中,一个int数值类型有32二进制 1是符号,从2的0次方开始算起,数值的范围为 [−232,231−1][-2^{32},2^{31}-1][−232,231...−1] Java的运算 带符号运算 <<左移就是向左移一,比如101左移1 101 1010 向后补0 >>右移就是向右移一 101 0101 记住这是带符号的移位 无符号运算...−3-3−3变成了 230+21=21474836462^{30} + 2^{1}=2147483646230+21=2147483646 便于观察我们可以将-3无符号左移31 1 0000 0000

54220
  • 运算的妙用 1

    这个系列主要是记录作者本人在学习算法过程中的一些总结 首先呢,我们通过一道题来引出今天所讲到的技巧: 看到这道题,大家会考虑怎么做,我第一次想出的答案就是直接求和,然后减去真正的1~1000数字的和,最后得到的那个数字就是所求...在此之前,大家先学习一下这些运算的操作符 这道题呢,我们主要是运用 ^ 运算符去求解,也就是左右两个数相同时结果为 0 ,不同时结果为 1,从而达到去重的效果,但是这道题要求的是求出重复的数字...所以,就用这数组中1001个元素去与1~1000的数字去 ^ 那么1001中1 ~ 1000的数字就都出现了两次,通过亦或运算符消除掉了,而原来数组中重复的元素加起来出现了三次,两个被去重了,剩下那个就被留下来了...System.out.println(x1); } //交换元素 public static void swap(int arr[], int index1, int index2...) { int temp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = temp;

    5310

    J 神提问:除以 2 还是右移 1

    最终,每个方法实际上都仅仅使用了一个字节码来操作相关联的整型数运算。它们都使用了 v1 寄存器来保存第一个方法参数,另外还需要一个字面量 1 或者 2。...在 Android 10 Pixel4 的设备上执行相同的指令,来看看 ART 是如何将代码编译成 ARM 汇编代码的。...到此为止,我们可以肯定的说,使用 value > 1 来代替 value / 2 不会带来任何好处。停止在算数运算中做这样的事情吧,仅在严格要求运算的情况下保留。...在 Android 上,选择 除以2 还是 右移1 ? 都不是!仅在实际需要按操作时使用移位运算,其他数学运算使用乘除法。我将着手将 AndroidX collection 的运算切换到乘除法。

    1.2K20

    1的个数 逻辑运算

    逻辑运算运算就是对二进制数执行计算,是整数的逐运算。 图片.png & 与 如果两个相应的二进制都为1,则该位的结果值为1,否则为0。...| 或 两个相应的二进制中只要有一个为1,该位的结果值为1。 ^ 异或 若参加运算的两个二进制值相同则为0,否则为1。...~ 取反 ~是一元运算符,用来对一个二进制数取反,即将0变1,将1。 << 左移 用来将一个数的各二进制全部左移N,右补0。...进阶:如果多次调用这个函数,你将如何优化你的算法?...思路及解法 循环检查 1.循环检查给定的整数每一是否为12.将n跟给定的对应位置上的数字进行与运算,如果两个相应的二进制都为1,则该位的结果值为1,结果加1,否则为0。

    81930

    O(1)时间检测2的幂次除以2统计1的位数n和n-1取且

    用 O(1) 时间检测整数 n 是否是 2 的幂次。 样例 n=4,返回 true; n=5,返回 false. 除以2 这个当然是很简单也最容易想到,int的话可能要除31次才能出来。...n有符号数的表示范围: -2^n-- 2^(n-1)-1 原码的表示:     左边是符号,正数为0,负数为1。...    【+0】反码 = 00000000     【-0】反码 = 11111111   补码的表示:     正数的补码与原码相同,负数的补码由原码的反码加1得到     【+10】补码...再如,将3点的时针调慢一个小时,即调成2点,和将时针向前调整11个小时的效果是一样的。因此用3-1和(3+11)mod(12)的结果一样。补码在机器码中的运用主要是用加法元算代替减法运算。...在8字中,我们的模就是2的8次方,即256。

    59330

    Datawhale组队学习 -- Task 1:变量、运算符、数据类型及运算

    true print(not (2 > 1)) # not相当于取反,结果为true加上not就输出反向结果 结果 运算符 符号 操作符 名称 示例 ~ 取反 ~4 & 与 4 &...5 | 或 4 | 5 ^ 异或 4 ^ 5 << 左移 4 << 2 >> 右移 4 >> 2 取反(~) 取反运算符~为单目运算符(只有一个操作数),右结合性,作用是对参与运算的二进制取反...(|) 运算符|的运算规则是:两个二进制有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0。...(^) 异或运算^的运算规则是:参与运算的两个二进制不同时,结果为 1,相同时结果为 0。...在内存中的存储) 上面两个可以看出9>>3高位丢的0就补0,(-9)>>3丢的1就补1 如果被丢弃的低位不包含 1,那么右移 n 位相当于除以 2 的 n 次方(但被移除的中经常会包含 1)。

    30060

    运算运算的技巧、二进制中1的个数、区间或、异或森林)

    右移相当于对原数进行除以2的幂次方的操作 例如,对于整数13(二进制表示为00001101),执行左移2操作,相当于执行13/4向下取整。...1.3、操作符 &    与:只要有0就是0,两个同时为1才是1。 |     或:只要有1就是1,两个同时为0才是0。 ^    异或:相同为0,相异为1。...~    取反:将一个数的二进制0取11取0,之后再加一。...int main() { int a = 3; int b = -5; int c = a & b; /*(二进制)运算 计算规则:对应二进制进行与运算 只要有0就是0,两个同时为...肖恩进入了这片森林,他得到了一个任务:找出数组中满足条件的连续子数组,使得连续子数组中所有元素异或运算结果的因数个数为偶数。完成任务将揭示宝藏的所在地。

    30410

    探究运算中的神奇操作:n&(n-1)

    引言 在编程和算法领域,运算因其高效性和独特性备受青睐。今天,我们就来探讨一个有趣的运算操作:n&(n-1),看看它究竟有何妙用。...count = 0; scanf("%d", &n); while(n) { n &= (n - 1);//即n=n&(n-1)进行n&(n-1)运算再把得到的结果赋值给n count++...判断一个数是否为2的幂次方   判断一个数是否为2的幂次方,可以通过n&(n-1)来实现。如果一个数是2的幂次方,那么它的二进制表示中只有一个1,其余都是0。...例如:2(10)、4(100)、8(1000)...都是2的幂次方。 对于这些数,执行n&(n-1)操作后,结果必然为0。...运行结果如下: 总结  n&(n-1)这个位运算操作虽然简单,但其应用场景却非常广泛。

    10910

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

    我问计算机芸芸部件,1+1究竟是如何计算的,他们都茫然的看着我。...作者问浏览器:“你小子是怎么知道1+1等于2的?纵观人类进化史,从学会使用石头,到学会结绳记数,用了100万年。你年纪轻轻28岁,是怎么知道1+1等于2的?”...这时CPU听到有人叫他的名字,耐不住了。CPU问:“谁在说俺的大名!v8,那后面的'mov eax,1'是什么?我怎么从来没见你提过?”...例如他看到指令是010100010010,首先从前40101判断,这是一个寄存器设置命令,于是就打电话通知寄存器老头来领取数据包裹;如果看到前4是1010,就知道这是一个加法指令,就打电话通知算术运算单位的加法器来领取数据和任务...所以,我的加法运算能力也不是无限的,能算多大数字是由硬件决定的。” 这下明白了,CPU并不知道1+1等于2。之所以1+1能算出等于2,是人类在设计CPU的时候赋能给它的。

    1.9K20

    为什么补码是取反加一_补码为什么加1

    因为你想要的,不是1+1=2,而是,1+1为什么等于2。当然,我们不讨论1+1的问题。我们讨论的,是补码。...但是呢,还有一个问题,为什么补码的求法是取反再加一呢,其实当你不明白为什么各大书籍都要用取反来计算补码的时候,我们完全可以直接用0减去它就得到他相反数的二进制编码了,譬如随便一个十六进制数 6C...,那么我们可以直接0-6C就得到他的相反数的补码了,结果为十六进制的94,跟取反再加一的效果一样。...,你发现了之前一直迷惑你的一个东西,“取反再加一”,但是可能还有一点迷惑,我们继续,因为我们每次都是用一个0减去一个数的补码来得到另一个数的补码,也就是里面的(11111111+00000001)是不变的...– 一个数的补码)换成 “取反”,也就是 (取反)+000000001=它相反数的补码,现在,取反,再加一,就终于出来了,这就是各大书籍资料所讲的,补码=取反+1..。

    66810

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

    对于初学者,我们只需要考虑一个问题:计算机是如何计算 1+1=2 的? 正文 这个问题看似简单,但通过它可以见微知著。所有表面上复杂的软件运行,都是底层简单的节字叠加。...现在我们仅以 JS——JavaScript 的简写,来探究计算机是如何计算 1+1=2 的? 首先,打开谷歌浏览器,右健单击空白处,选择 “检查”: ?...现在在 Console 面板输入我们的算式: 1+1 下回车键。 我们看到浏览器输出了 2: ? 这个过程看起来很快,但计算机内部其实已经经过 N 多复杂的运算操作。...例如,他看到指令是「010100010010」,首先从前 4 0101 判断,这是一个寄存器设置命令,于是就打电话通知寄存器老头来领取数据包裹;如果看到前 4 是 1010,就知道这是一个加法指令...笔者道,这下明白了,CPU 并不知道 1+1 等于 2,之所以 1+1 能算出等于 2,是人类在设计 CPU 的时候赋能给它的。而 CPU 内所有逻辑的运算,归根结底又都是开关的开合。

    1.9K20

    力扣题(2的幂)——学习到JAVA与“&”在“n&(n-1)”中的使用

    如上图,求一个数是不是2的幂,一行代码解决。 那么,(n & (n-1)) == 0是什么意思呢 java中“&”表示与操作,他把左右变为二进制然后取与。...“n=n&(n-1)”的意思就是 去掉“n的二进制”的最后一个1. 如果A&B==0,表示A与B的二进制形式没有在同一个位置都为1的时候。 这句话到底啥意思??不妨先看下n-1是什么意思。...n&(n-1)=1101010000 由此可以得出,n和n-1的低位不一样,直到有个转折点,就是借位的那个点,从这个点开始的高位,n和n-1都一样,如果高位一样这就造成一个问题,就是n和n-1在相同的上可能会有同一个...1,从而使((n & (n-1)) !...= 0),如果想要 ((n & (n-1)) == 0),则高位必须全为0,这样就没有相同的1。 所以n是2的幂或0

    53240

    运算–LC191– 1的个数___LC231–2的幂___LC190– 颠倒二进制__LC338– 比特计数

    运算的由来 在计算机里面,任何数据最终都是用数字来表示的(不管是我们平时用的软件,看的图片,视频,还是文字)。 并且计算机运算单元只认识高低电位,转化成我们认识的逻辑,也就是 0 1 。...示例 1: 输入: 1 输出: true 解释: 2^0 = 1 示例 2: 输入: 16 输出: true 解释: 2^4 = 16 解题: 由于是2的幂 由二进制的以得到: 16 的 二进制为 0001...示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: 5 输出: [0,1,1,2,1,2] 方法一:直接计算 最直观的方法是对从 00 到 num 的每个数直接计算「一比特数」。...每个 int 型的数都可以用 32 二进制数表示,只要遍历其二进制表示的每一即可得到 1 的数目。 利用运算的技巧,可以在一定程度上提升计算速度。...运算(&)的一个性质是:对于任意整数 x,令 x=x&(x−1),该运算将 x 的二进制表示的最后一个 1 变成 0。

    48710

    二进制中 1 的个数 ——《CC++ 运算黑科技 03》

    原理 计算一个二进制数中 1 的出现次数其实很简单,只需要不断用 v & (v - 1) 移除掉最后一个 1 即可,原理可以参考这篇文章:2 的幂次方 ——《C/C++ 运算黑科技 02》 上述方法是一个普通的思考方向...1 & 0x5555 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 = 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 然后两者相加就得到了相邻 2 个计数器的合并计数...00 00 00 01 00 10 然后两者相加就得到了相邻 4 个计数器的合并计数:0011000100100011,然后我们在以 4 个比特为单位来继续合并计数器 Val 0011 0001 0010...Data 64 KiB (x8) L1 Instruction 128 KiB (x8) L2 Unified 4096 KiB (x2) Load Average: 2.64, 2.22, 1.79...Data 32 KiB (x6) L1 Instruction 32 KiB (x6) L2 Unified 256 KiB (x6) L3 Unified 9216 KiB (x1) Load

    93721
    领券