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

、>>>移位操作

<<,有符号左移位,将运算数的二进制整体左移指定位数,低位用0补齐。...接下来看看将负数进行左移2位操作是什么情况,运算结果如下。 ? 为什么会-10的二进制会出现这么多的1呢?仔细数一下刚好有32位。...接下来看看将负数进行右移2位操作是什么情况,运算结果如下。 ? 负数的有符号右移基本原理还是和左移相同,不同的是结果的计算,因为这是有符号的右移,一直右移最后的结果就会是-1。...>>>,无符号右移位,不管正数还是负数,高位都用0补齐(忽略符号位) 先看正数,正数的>>>无符号右移位和>>有符号右移位计算结果相同 int rightShift = 10; System.out.println...虽然无符号移位后的二进制和有符号移位后的二进制看起来相同的,但结果大相径庭,记住有符号右移位操作,实际上是忽略符号的算术操作,即高位统一补0。

85591
您找到你想要的搜索结果了吗?
是的
没有找到

JAVA中有趣的移位操作

上次介绍了JAVA中有趣的位运算,知道了位运算是直接对一个整形的二进制位进行操作,效率上比起加减乘除高不少,因此常运用在对性能很敏感的场景。 今天介绍在二进制下的移位操作。...JAVA中也一样,存储和移位操作的都是补码,正数时都一样,负数时就要注意了。 << 左移位 在二进制格式下,把所有的数字向左移动指定位数,左边的高位移出(舍弃),右边的低位多出来的空位补0。...另一个需要注意的地方,由于Java只存储补码,正数补码和原码相同先不管,负数的补码会把原码的0变成1,所以负数左移位时,移出去的最高是1,后面怼上来的一般也是1(没到极限),所以还是负数。...11111111111111111111111111111100 (符号位除外,其余取反) // 补码: 11111111111111111111111111111101 (反码+1) // Java存储补码,移位操作也是对补码操作...左移操作相当于乘2,右移相当于除2,不全是 左移操作可能改变正负,因为符号位会被移走,新符号位不一定和以前一样 右移操作不改变符号,因为左边填充的是符号位 无符号右移会把负数变成正数 没有无符号左移

1.4K30

Java中有趣的移位操作!彻底弄懂各个移位操作符的使用方式

注意 三种移位运算作用的左操作数有五种: long int short byte char 在作用不同的操作数类型时的具体操作过程不同,遵循以下原则: int移位时, 左操作数是32位,此时移位符号作用在...32位bit上 比如: 1 >> 3,是将00000000 00000000 00000000 00000001这32位向右移动3位 long移位时,左操作数是64位,此时移位符号作用在64位bit上...11111111这32位向右移动7位,得到的结果是00000001 11111111 11111111 11111111 由上可知: 当左操作数为long时,移位之后得到的类型是long 当左操作数是其它四种类型时...,移位之后得到的类型时int 所以当左操作数是short,byte,char时,使用 >>=, >>>=, <<= ....其实是将得到的int做低位截取得到的数值,得到的值往往会错 三种移位符号除了对左操作数有操作规则外,对右操作数也有操作规则: 如果左操作数是int或者转换之后是int, 那么右操作数只有低5位有效,因为

62930

按位操作符和移位操作

今天主要了解一下按位操作符和移位操作符,因为看源码的时候经常会遇到,之前有点不明白,趁着这次机会学习一下。 按位操作符 按位操作符是用来操作整数基本类型中的当个“比特”,即二进制位。...移位操作移位操作操作的对象也是二进制的“位”。移位操作符只能用来操作整数类型。 左移位操作符 << 左移位操作符能按照右侧指定的位数将操作符左边的操作数向左移动,在低位补0。...十进制中1的进制表示为: 0000 0001当执行 1 << 4,将其向左移动4位,得到: 0001 0000换算位十进制就是16 右移位操作符 >> 右移位操作符按照操作符右侧指定的位数将操作符左边的操作数向右移动...右移操作符使用“符号扩展”,主要表现为: (1)如果符号为正,则在高位插入0; (2)如果符号为负,则在高位插入1; 还有一种无符号的右移位操作符 >>> ,使用零扩展,无论正负,都在高位插入0。...25的二进制为: 00011001当执行 25 >> 2,将其向右移动2位,得到: 00000110换算位十进制就是6 下面看下无符号的有移位,-25的二进制表示为: 11111111111111111111111111100111

44620

【C语言】位与移位操作符详解

原因在于,使⽤补码,可以将符号位和数值域统处理;同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算 过程是相同的,不需要额外的硬件电路. 3.移位操作符(对于数值的二进制操作...) << 左移操作符 >> 右移操作符 注: 移位操作符的操作数只能是 整数 。...①左移操作符<< 规则:左边抛弃,右边补零 ②右移操作符>> 规则: ⾸先右移运算分两种: 1. 逻辑 右移:左边⽤0填充,右边丢弃 2....算术 右移:左边⽤原该值的符号位填充,右边丢弃 注: 对于移位运算符,不要移动负数位,这个是标准未定义的。...②按位或| 按位或类似于数学中逻辑与算符或: 只要有一个真则为真其余为假(只要有一个1则为1,其余为0) ③按位异或^ 相异为真(01则为1,其余为0) ④按位取反~ 取相反值就行 5.结语 位与移位操作符是

9810

移位运算(无符号移位运算,有符号移位运算)

移位运算,所有移位以5和-5为例 移位运算 左移(<<) 正数 负数 带符号右移(>>)(右移向前面补对应的符号位所对应的值(正数补0,负数补1)) 正数 负数 不带符号右移(>>>)(>>>为...java独有语法) 正数 负数 移位运算 可以移位运算的类型有:iuint,int,lang等类型.我们本次使用int类型 一个int类型占4个字节,共32位,带符号位,所以最高位位符号位(使用0,1...表示符号位) 我们首先需要了解正数和负数的二进制码分别如何表示(以5和-5为例) 正数:0000 0000 0000 0101 负数:1000 0000 0000 0101 移位操作在二进制中都是补码移位在转会为原码得到相应的值...正数的反码,补码与原码相同 负数的反码为除符号位全部取反 负数的补码为反码加1 所以 在对正数进行移位操作时就是对原码进行操作 负数是对补码操作,操作完成后再转换为原码得到对应的值 所以-5

1.3K40

【C语言】位操作符与移位操作符练习

前言: 前篇我们学习过C语言的位与移位操作符详解【C语言】位与移位操作符详解-CSDN博客 这篇博客将带领大家继续练习相关知识。 1.一道变态的面试题 不允许创建临时变量,交换两个整数的内容。...解析:通过上节我们学习的位与移位操作符,我们可以大概知道需要用到它们。...解析:我们知道按位与是同真为真也就是二进制中都是1才为1,只要有一个不为1就是0; 所以如果我们将n按位与1(1的二进制除了最后一位其他都是0),那么我们就可以知道n最后一位是1还是0了,如果再通过右移操作符将...{ count += (n>>i) & 1; } printf("\n%d的二进制中1的个数为:%d\n",n,count); return 0; } 运行结果如下: 方法一 优点:用位操作代替取模和除法运算...3.打印整数二进制的奇数位和偶数位 思路: 1.提取所有的奇数位,如果该位是1,输出1,是0则输出0 2.以同样的方式提取偶数位置(我们可以用移位操作符来提取) 检测num中某一位是0还是1的方式:

7810

字母移位

字母移位 有一个由小写字母组成的字符串S,和一个整数数组shifts。 我们将字母表中的下一个字母称为原字母的 移位(由于字母表是环绕的,z将会变成a)。...对于每个shifts[i] = x, 我们会将S中的前i+1个字母移位x次。 返回将所有这些移位都应用到S后最终得到的字符串。...将 S 中的第 1 个字母移位 3 次后,我们得到 "dbc"。 再将 S 中的前 2 个字母移位 5 次后,我们得到 "igc"。...最后将 S 中的这 3 个字母移位 9 次后,我们得到答案 "rpl"。...,但是如果直接从数组尾部向前遍历,那么直接记录之前的累加值然后作循环移位即可,首先定义一个累加值计数和sub,Js中没有char基本数据类型,所以对于字符操作需要通过Ascii码计算,定义base作为字符

1.1K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券