为什么有 3 个,移位运算不是左就是右,为什么有 3 个? 因为 Java 的整数是有符号的整数,所以针对符号转换 Java 添加了一个无符号右移。...因为 Java 可以处理整数的长度不一样,所以移位运算只会用在 int 上,虽然其他数据类型也可以用,但是都是在转换成 int 后进行计算的。...类型 长度 long 64 位 int 32 位 short 16 位 byte 8 位 char 16 位 整数 2 进制表达 在 Java 的整数 int 表达中,其中有一个位留给了符号位置,所以真正可以存储数据的位为...因此,Int 的存储范围为:[-2^31,2^31-1],所以上面的指数为 31, 而不是 32 的原因是其中有一位留给了符号位。...带符号右移操作符 >> Java中整型表示负数时,最高位为符号位,正数为0 ,负数为1 。 >> 是带符号的右移操作符,将数据转换成二进制数后,向右移若干位,高位补符号位,低位丢弃 。
JAVA位运算等运算符总结 一、概述 运算符是一种“功能”符号,用以通知 Java 进行相关的运算。...= 按位与赋值运算符 ^= 按位异或赋值操作符 |= 按位或赋值操作符 四、比较运算符 就是判断两个数据的大小,没什么可说的。...左操作数按位左移右操作数指定的位数。 >> 按位右移运算符。左操作数按位右移右操作数指定的位数。 >>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。...按位操作,首先要知道不同类型字节长度,网上都是显示一个字节8位,不是每个数字都是8位的。但你可以将计算过程以8位来算。...以int整型32位,带负数为例子(正数的太简单了,略过): 按位与&(补码): 数字1:00000000000000000000000000000001 数字-128:11111111111111111111111110000000
, int, short, char 和byte 比如 a = 16, 00010000(在Java中,所有数据类型都是补码表示的,8位二进制为了方便直观的观看) b = 3,00100000 --...----------- ~a a : 0001 0000 等于: 操作数的第n位为1,那么结果的第n位为0,反之 在Java中,所有数据类型都是补码表示的,没有特殊说明,默认是int,int...在Java中 很多底层都用这种方法来处理数据,因为底层是用二进制进行表示的,直接用二进制进行处理当然是性能很高的 符号 描述 &(按位和) 第一个操作数的的第n位于第二个操作数的第n位如果都是1,那么结果的第...逻辑非运算符,用于取反结果 ---- 赋值运算符 操作符 描述 例子 = 简单的赋值运算符,将右操作数的值赋给左侧操作数 C = A + B将把A + B得到的值赋给C + = 加和赋值操作符...,它把左操作数和右操作数取模后赋值给左操作数 C%= A等价于C = C%A 移位赋值运算符 C << = 2等价于C = C << 2 >> = 右移位赋值运算符 C >> = 2等价于C
Java 数据类型 Java整型数据类型有:byte、char、short、int、long。要把它们转换成二进制的原码形式,必须明白他们各占几个字节。...最高位如果是 0 的话(正数), 不变,正数的补码就是它的原码。 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。...>>> 按位右移补零操作符 >>:按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充(忽略符号位)。...由于数据类型所占字节是有限的,而位移的大小却可以任意大小,所以可能存在位移后超过了该数据类型的表示范围,于是有了这样的规定: 如果为int数据类型,且位移位数大于32位,则首先把位移位数对32取模,不然位移超过总位数没意义的...如果为byte、char、short,则会首先将他们扩充到32位,然后的规则就按照int类型来处理。 位运算有什么用 位运算到底有什么用途或者有哪些场景可以应用到它?
左操作数按位左移右操作数指定的位数。 >> 按位右移运算符。左操作数按位右移右操作数指定的位数。 >>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。...7.5 赋值运算符 下面列出 Java 中的赋值运算符: 操作符 描述 = 简单的赋值运算符,将右操作数的值赋给左侧操作数 + = 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 - = 减和赋值操作符...,它把左操作数和右操作数取模后赋值给左操作数 移位赋值运算符 >> = 右移位赋值运算符 &= 按位与赋值运算符 ^ = 按位异或赋值操作符 | = 按位或赋值操作符 7.6 三元运算符...〜 从右到左 乘性 * /% 左到右 加性 + - 左到右 移位 >> >>> 右 关系 >> = 右 相等 == !...当然,Java 中的条件语句也支持嵌套操作。
Java 提供了很多操作符,这些操作符可以作用于整数值上。 比较操作符 第一个是比较操作符,它的结果是 boolean 类型的值。包括 数字比较运算符: 和 >=。...减一 有符合和无符号的移位操作符:> 和 >>>。 << :左移,低位补0,不区分正数负数。 >> :右移,正数右移,高位补0,负数右移,高位补1。...,比如这里会输出 -127 System.out.println(lowByteValue); 你会发现居然输出的是 -127,而不是 129。...位,byte 类型数据为 8 位,Java 把 int 类型数据转成 byte 类型数据时,实质上是截取 int 后 8 位存到 byte 中。...尾数位向右移动是右规,尾数位向左移动是左规。 结果舍入。对阶或右规过程中,最右端被移出的位会被丢弃,造成结果精度损失。
(short),字符型(char),和字节型(byte)等类型。...左操作数按位左移右操作数指定的位数。 a << 2 即 1111 0000 >> 按位右移运算符。左操作数按位右移右操作数指定的位数。 a >> 2 即 1111 >>> 按位右移补零操作符。...左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 a >>>2 即 0000 1111 逻辑运算符 a 为 true,b 为 false 操作符 描述 例子 && 逻辑与运算符。...(点操作符) 左到右 一元 ++ - !...~ 右到左 乘性 * / % 左到右 加性 + - 左到右 移位 >> >>> 右 关系 > >= = 右 相等 == ~= 左到右 按位与 & 左到右 按位异或 ^ 左到右 按位或
c + a : c + b;// a<b结果是true,因此d=c+a=25 3.7.6位运算符 在Java中,处理整型数值时,可以直接对数值的二进制的各个位进行操作,我们先列一个表,然后再进行例子演示...翻转操作数的每一位,即0变成1,1变成0 右操作数指定的位数 >> 按位右移运算符。左操作数按位右移右操作数指定的位数 >>> 按位右移补零操作符。...左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。...对于<<运算,要注意几点: 对byte、short、char型进行左移运算,移位之前,它们会自动转换为int 右侧的参数,需要进行模32运算,其实就是保证右侧的参数小于32(当左侧是long,则模64,...Java中是允许这种数值转换的,方法就是用强制类型转换,但是会丢失精度。
参考链接: Java中的按位运算符 Java 运算符 算术运算符关系运算符:位运算符逻辑运算符赋值运算符其他运算符 《一》算术运算符:+ - * / % ++ -- 1、前缀自增自减法(...逻辑非:用来反转操作 《五》赋值运算符 =赋值运算符,右操作数的值赋给左侧操作数C = A :把A的值赋给C+ =加和赋值操作符C + = A等价于 C = C + A- =减和赋值操作符C -...:)例: int max = ( a > b ) ?..." + (e instanceof Person));//错误 } } class Person{} 《八》Java运算符优先级(别人的拿过来记忆) 类别操作符关联性后缀() [] ....(点操作符)左到右一元+ + - !〜从右到左乘性 * /%左到右加性 + -左到右移位 >> >>> 右关系 >> = 右相等 == !
算数运算符 操作符 名称 描述 + 加法 相加运算符两侧的值 – 减法 左操作数减去右操作数 * 乘法 相乘操作符两侧的值 / 除法 左操作数除以右操作数 % 取余 左操作数除以右操作数的余数 ++ 自增...比较运算符 操作符 名称 描述 > 大于 相加运算符两侧的值 右操作数 == 等于 相乘操作符两侧的值 >= 大于等于 左操作数除以右操作数 的余数...>>> 无符号按位右移 通常格式为:value >> num,value按右移num位,移动得到的空位以零填充。 5....赋值运算符 操作符 名称 描述 = 赋值 右操作数的值赋给左侧操作数 += 加和赋值 左操作数和右操作数相加赋值给左操作数 (a+=b 等同于 a = a+b) -= 减和赋值 左操作数和右操作数相减赋值给左操作数...a = a/b) (%)= 取模和赋值 左操作数和右操作数取模后赋值给左操作数 (a%=b 等同于 a = a%b) 移位赋值 左移位赋值运算符 **(a<<=b 等同于 a = a< >
的值是否小于右操作数的值,如果是那么条件为真。 1.3位运算符 操作符 描述 & 按位与操作符,当且仅当两个操作数的某一位都非0时候结果的该位才为1。...左操作数按位左移右操作数指定的位数。 >> 按位左移运算符。左操作数按位左移右操作数指定的位数。 >>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。...1.5赋值运算符 操作符 描述 例子 = 简单的赋值运算符,将右操作数的值赋给左侧操作数 C = A + B将把A + B得到的值赋给C + = 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数...break跳出最里层的循环,并且继续执行该循环下面的语句。 2.6、continue关键字 continue适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。...switch 语句中的变量类型可以是: byte、short、int 或者 char。
只是为了取得低八位 通常配合移位操作符>>使用 例如:java socket通信中基于长度的成帧方法中,如果发送的信息长度小于65535字节,长度信息的字节 定义为两个字节长度。...保证补码的一致性 我们只关心二进制的机器数而不关注十进制的值,那么byte &0xff只是对其最低8位的复制,通常配合逻辑或 ‘’|’’使用,达到字节的拼接,但不保证其十进制真值不变 public static...1111表示为十进制 也是 -127 也就是 当 byte -> int 能保证十进制数不变,但是有些时候比如文件流转为byte数组时候, 我们不是关心的是十进制数有没有变,而是补码有没有变,这时候需要...一致,但是显然符号位变化了,表示的十进制数发生变化,变为129 结论: java中基本类型从小扩展到大的数据类型时候,正数因为符号位是0,无论如何都是补零扩展,但是负数补零扩展和补符号位扩展完全不同,...负数补符号位扩展,保证十进制数不变 例如 byte>>>int -127自动按照补符号位扩展,在高24位补符号位1,表示的十进制数不变 补零扩展,保证补码的一致性,但是表示的十进制发生变化 例如,本例中
除法运算符有些特殊,如果除法运算符的两个操作数都是整数类型,则计算结果 也是整数,就是将自然除法的结果截断取整,例如19/4的结果是4,而不是5。...int a=5; 也可使用赋值运算符将一个变量的值赋给另一个变量。 int a=5; int b=a; 位运算符 Java支持的位运算符有如下7个。 &: 按位与。 |: 按位或。 〜:按位非。...A >> 2得到15即 1111 >>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。...类别 操作符 关联性 后缀 () [] . (点操作符) 左到右 一元 + + - !...〜 从右到左 乘性 * /% 左到右 加性 + - 左到右 移位 >> >>> 右 关系 >> = 右 相等 == !
本篇文章主要介绍Java中的位运算符,为零基础的Java学习者提供详细的入门指导。...摘要 Java的位运算符是一组非常重要的运算符,它们能够对二进制数字进行操作,包括移位、与、或、异或等操作,这些操作对于优化程序的性能以及处理特定类型的数据非常有用。 ...Java中的位运算符包括以下几种: 按位与操作符:& 按位或操作符:| 按位异或操作符:^ 按位取反操作符:~ 左移位操作符: << 右移位操作符: >> 无符号右移位操作符: >>> 下面我们将分别详细介绍这些操作符的使用方法...无符号右移位操作符 无符号右移位操作符使用符号“>>>”,它用于将操作数的二进制值向右移动指定的位数,但是它会在空位上插入0,而不是符号位的复制。...处理位数据 Java中的位运算符也可用于处理位数据,例如字节、字、长整型等。使用这些运算符,我们可以轻松地提取位数据、计算位数据和操作位数据。
2、整数型的计算结果都是int型,而不管是对byte还是short进行二进制运算。...1110 这个数字转换为十进制就是数字14 l ~(NOT) 运算规则:只操作一个数字,将该数字中为1的位变成0,为0的位变成1.适用场合:反转数字的内容示例代码: int a = 4;...= 0); 将任意数字倒数第四位置为 假设n是一个任意的整数,则代码为: int m = n | 0x8; 在Thinking in Java第三章中的一段话: 移位运算符面向的运算对象也是二进制的...若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。...若对byte或short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出)。它们会自动转换成int类型,并进行右移位。
if的表达式为判断是否相等,判断是否相等的符号为"=="而不是"=" if (a=1) 这样一来就不是判断了,而是将1赋值给a!!!...而只要有浮点数,执行的就是浮点数除法 % 操作符的两个操作数必须为整数,返回的是整除后的余数 我们可以在VS中运算一下 10.2 移位操作符 操作符 >> 右移操作符 注意:移位操作符的操作数只能是整数...我们用图来解释 左移一位即是,二进制序列向左移动一位,在末尾补一个0,形成新的二进制序列 移位的时候移动的是补码 左移n位效果相当于,乘上2的n次方 m只参与运算,m的值不变,这里m移位的结果其实是...n的值 所以我们总结下来,向左移位的规则就是:左边丢弃,右边补0 负数同样的道理 10.2.4 右移操作符 移位规则: 首先右移运算分为两种: 逻辑移位:左边用0填充,右边丢弃 算数移位:左边用原该值的符号位填充...是操作符而不是函数 sizeof 是在计算类型创建变量或者变量的大小,单位是字节 sizeof 计算的结果是size_t 类型的 size_t 是无符号整型 对 size_t 类型的数据进行打印,可以使用
局部变量通常保存在寄存器中,而不是内存中。...第二个操作数可以是寄存器或是内存位置 注:第二个操作数为内存地址时,处理器必须从内存读出值,执行操作,再把结果写回内存 移位操作 最后一组 先给出移位量,然后第二项给出的是要移位的数 可以进行算术右移或逻辑右移...0 INC 和 DEC 指令会设置溢出和零标志,但不会改变进位标志 CMP 与 TEST 指令和 SUB 与 AND 指令的区别仅在于,前者只设置条件码而不更新目的寄存器 访问条件码 条件码常用的使用方法...,要么是从指定的地址读取 数组与指针紧密联系 将指针从一种类型强制转换成另一种类型,只改变它的类型,而不改变它的值 (指向的地址) 指针也可以指向函数 // 定义方法fun int fun(int x,...Java的目标代码是一种特殊的二进制表示,称为Java字节代码 (字节码)。 这种代码可以看成是虚拟机的机器级程序,这种机器并不是直接用硬件实现的,而是用软件解释器处理字节码,模拟虚拟机的行为。
程序流程控制 移位运算符 移位运算符面向的运算对象是二进制的位,可单独用它们处理整数类型。左移位运算符(的运算对象向左移动运算符右侧指定的位数(在低位补0)。...“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(>>>),它使用“零扩展”:无论正负,都在高位插入0。...若对char, byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只用右侧的5个低位才会用到。这样可防止我们在一个int数里移动一个不切实际的位数。...但在进行“无符号”右移位时,也可能遇到一个问题,若对byte和short值进行又移位运算,得到的可能不是正确的结果。它们会自动转换成int类型,并进行右移位。...注:尽管我们可以在非静态方法中访问静态方法和静态变量,但是反过来却是不行的。因为静态数据的构造要优先于非静态方法。 Java中使用垃圾收集器回收由不再使用的对象占据的内存。
计算机的单位中除了bit、byte之间的转化为8外,其它单位之间的转化都是1024 在数组篇中我们提到过一个操作符——sizeof——计算操作数所占内存空间大小,这个操作符计算出来的数值的单位就是字节。...,向右移动了三位; 现在我们就很明确了,我们移动的数值与二进制位移动的数值是一一对应的,那是不是就说明移位操作符移动的其实是二进制位呢?...我们可以来验证一下: 现在我们从这些测试结果中就能得到结论: 自赋值操作符是将左操作数与右操作数这个整体进行运算之后再赋值给自己; 所以希望大家在使用自赋值操作符时一定要先判断此时的自赋值对象是不是需要与右操作数这个整体进行运算...在这个情况中的操作符可不是指算术操作符,还可能是其它的操作符,这里我们方便起见,以最开始的例子来说明: //表达式求值 int main() { char a = 'a'; short b = 1;...; 如三目操作符会根据表达式1的值的不同而进行不同顺序的求值; 逻辑或在左操左对象为真时,不再计算右操作对象; 逻辑与在做操作对象为假时,不再计算右操作对象; 逗号表达式的值是最右边表达式的值; 运算符的优先级顺序很多
在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同... System.out.println(j); //二进制吗为11值为2 } } 在Thinking in Java第三章中的一段话: 移位运算符面向的运算对象也是 二进制的“位...Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。 ...若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。...若对byte或 short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出)。它们会自动转换成int类型,并进行右移位。
领取专属 10元无门槛券
手把手带您无忧上云