1.位操作符
按位操作符和逻辑操作符使用的是相同的符号,所以理解起来也还好。
按位操作符操作的是比特(bit),就是二进制位这些东西(“1001010100”)
简单说一下进制转换二进制转十进制 :
1字节 byte 占8位(bit) :0000 1011 = 1*1 + 1*2 +0*4 + 1* 8 = 11;
一个字节最大值 0111 1111 = 127 0位表示该字节是正数
注意:数字在计算机中是以二进制补码形式保存的,正数的原码、补码都是一样的,而负数的补码是其绝对值反码加1。因此,正整数的二进制转换比较容易,负整数就醉了。
二元操作符:
“&” 在位运算的时候就是并且的意思 ,下面根据&操作符规则进行 二进制的相加
public static void main(String[] args) { // 十进制 二进制 int a = 10; // 0000 0000 0000 0000 0000 0000 0000 1010 int b = 6; // 0000 0000 0000 0000 0000 0000 0000 0110 int c = a & b; // 0000 0000 0000 0000 0000 0000 0000 0010 System.err.println(c); // 输出 :2 }
“|” 在位运算的时候是或者的意思,下面根据|操作符规则进行 二进制的相加
public static void main(String[] args){ // 十进制 二进制 int a = 10; // 0000 0000 0000 0000 0000 0000 0000 1010 int b = 6; // 0000 0000 0000 0000 0000 0000 0000 0110 // 因为|是二元运算符 所以可以这样写 参照(a+=b)理解 a |= b; // 0000 0000 0000 0000 0000 0000 0000 1110 System.err.println(a); // 输出:14 }
“^" 在位运算的时候是异或者的意思。不理解-6的二进制?结合下面”~“案例研究下吧
public static void main(String[] args) { // 十进制 二进制 int a = 10; // 0000 0000 0000 0000 0000 0000 0000 1010 int b = 6; // 0000 0000 0000 0000 0000 0000 0000 0110 int c = a ^ b; // 0000 0000 0000 0000 0000 0000 0000 1100 System.err.println(c); // 输出:12 int aa = 10; // 0000 0000 0000 0000 0000 0000 0000 1010 int bb = -6; // 1111 1111 1111 1111 1111 1111 1111 1010 int cc = aa ^ bb; // 1111 1111 1111 1111 1111 1111 1111 0000 System.err.println(cc); // 输出:-16 }
一元操作符:
"~" (非) 顾名思义就是取反的意思了
public static void main(String[] args) { /** * 推一下-10 的补码 * 0000 0000 0000 0000 0000 0000 0000 1010 10的补码 * 1111 1111 1111 1111 1111 1111 1111 0101 反码 * 1111 1111 1111 1111 1111 1111 1111 0110 反码+1 = -10补码 */ // 十进制 二进制 int c = -10;// 1111 1111 1111 1111 1111 1111 1111 0110 补码 int d = ~c; // 0000 0000 0000 0000 0000 0000 0000 1001 求反的结果 System.err.println(d); // 输出:9 int a = 10; // 0000 0000 0000 0000 0000 0000 0000 1010 补码 int b = ~a; // 1111 1111 1111 1111 1111 1111 1111 0101 求反的结果 System.err.println(b); // 输出:-11 /** * 根据b的补码 反推 b所代表的10进制数 * 1111 1111 1111 1111 1111 1111 1111 0100 补码-1 * 0000 0000 0000 0000 0000 0000 0000 1011 求反 十进制11 因为b的补码首位是1 代表负数 */ }
2.移位操作符
移位是运算的对象是二进制的“位”
1. 左移操作符(<<) 按照右侧指定的位数,将左边操作二进制数向左移动 (正负都是)低位补0;
public static void main(String[] args) { int i = 3; // 0000 0000 0000 0000 0000 0000 0000 0011 i <<= 2; // 0000 0000 0000 0000 0000 0000 0000 1100 左移两位 补零 System.err.println(i); // 输出:12 int a = -3; // 1111 1111 1111 1111 1111 1111 1111 1101 a <<= 2; // 1111 1111 1111 1111 1111 1111 1111 0100 补码-1 求反 System.err.println(a); // 输出:-12 }
如果对 char 、byte、short 类型进行移位,移位前会转为int类型 结果也是int型。
int 类型移位超过32 位 按移位数%32 取余移位
long 类型 结果还是 long
long 类型移位超过64 位 按移位数%64 取余移位
移位只有:long、int
public static void main(String[] args) { int a = 2; byte b = 2; char c = 2; short d = 2; double e = 2; long f = 2; System.err.println(a << 3); // 输出16 System.err.println(a << 35); // 输出16 System.err.println(b << 35); // 输出16 System.err.println(c << 35); // 输出16 System.err.println(d << 35); // 输出16 // System.err.println(e << 35); 无法编译 System.err.println(f << 35); // 输出168719476736 System.err.println(f << 3); // 输出16 System.err.println(f << 67); // 输出16 }
2. 右移操作符(>>) 按照右侧指定的位数,将左边操作二进制数向右移动 高位正补0 负补1;
public static void main(String[] args) { int i = 11; // 0000 0000 0000 0000 0000 0000 0000 1011 i>>=2; // 0000 0000 0000 0000 0000 0000 0000 0010 右移两位 补零 System.err.println(i); // 输出:2 int a = -11; // 1111 1111 1111 1111 1111 1111 1111 0101 a>>=2; // 1111 1111 1111 1111 1111 1111 1111 1101 补码-1 求反 System.err.println(a); // 输出:-3 }
3. 无符号右移操作符(>>>) 按照右侧指定的位数,将左边操作二进制数向右移动 无论正负都在高位补0;
实际对正数没什么影响 负数就又醉了。。
public static void main(String[] args) { int i = 11; // 0000 0000 0000 0000 0000 0000 0000 1011 i>>>=2; // 0000 0000 0000 0000 0000 0000 0000 0010 右移两位 补零 System.err.println(i); // 输出:2 int a = -11; // 1111 1111 1111 1111 1111 1111 1111 0101 a>>>=2; // 0011 1111 1111 1111 1111 1111 1111 1101 右移两位 补零 System.err.println(a); // 输出:1073741821 System.err.println(Integer.toBinaryString(a)); //输出:11 1111 1111 1111 1111 1111 1111 1101 int b = -11; // 1111 1111 1111 1111 1111 1111 1111 0101 b>>>=30; // 0000 0000 0000 0000 0000 0000 0000 0011 右移30位 补零 System.err.println(b); // 输出:3 }
相关推荐
Java中的移位操作符用于对二进制数进行左移()、右移(>>)和无符号右移(>>>)操作。 左移()操作符:将一个数的所有位向左移动指定的位数,右侧空出的位用0填充。 右移(>>)操作符:将一个数的所有位向右移动...
这些操作符可以分为两大类:按位逻辑操作符和移位操作符。 按位逻辑操作符 按位逻辑操作符是指对两个操作数的每一位进行布尔代数运算的符号。这些符号包括: * 与(&):对两个操作数的每一位进行AND运算,如果两...
以下是一个完整的Java操作符优先级列表: 1. 后缀运算符:`[ ]`、`.`、`( )`(函数调用) —— 这些操作符从左到右执行。例如,`array[index]`、`object.method()` 和 `(expression)`。 2. 单目运算符:`!`、`~`、...
本文将深入讲解Java中的位操作符,包括与(&)、或(|)、异或(^)、非(~)以及移位操作符。 首先,让我们来看看位操作符。Java提供了四种基本的位操作符: 1. **与(&)**:当两个操作数的相应位都是1时,结果的对应位才...
左移操作符()是位运算符之一,它在Java中有着特定的应用和理解。本篇文章将深入探讨Java中的左移操作符及其相关知识点。 一、位运算符概述 位运算符直接作用于二进制位,它们包括:左移(),右移(>>),无符号...
左移位操作符(`)将操作数的所有位向左移动指定的位数,高位丢弃,低位补0。例如: ```java public class LeftMoving { public static void main(String[] args) { System.out.println("5(5 )); } } ``` 输出...
3.5.1 一元加、减操作符 3.6 自动递增和递减 3.7 关系操作符 3.7.1 测试对象的等价性 3.8 逻辑操作符 3.8.1 短路 3.9 直接常量 3.9.1 指数记数法 3.10 按位操作符 3.11 移位操作符 3.12 三元操作符 if-else 3.13 ...
**1.6 移位操作符** - **左移**: ` - **右移**: `>>` - **无符号右移**: `>>>` **1.7 一元加减操作符** - **加**: `+` - **减**: `-` **1.8 自动递增递减运算符** - **前缀递增**: `++i` - **后缀递增**: `i++`...
Java语言中的移位操作是处理二进制数据时非常高效且强大的工具,它涉及到计算机底层的位运算。本文将深入探讨如何使用Java的移位操作来处理二进制,并通过示例代码展示其实现方法。 首先,我们来看一下Java中的移位...
Java移位运算符是Java编程语言中的一种基本操作符,主要用于对二进制数的移位操作。Java中有三种移位运算符:左移运算符()、带符号右移运算符(>>)和无符号右移运算符(>>>)。下面我们将详细介绍这三种移位...
在这个问题中,我们可以使用右移位操作符(>>)和左移位操作符()来颠倒二进制位。右移位操作符可以将二进制位向右移位,例如将 00000010100101000001111010011100 右移一位将得到 ...
Java中的移位运算符是一种极其有用的位操作工具,其主要包括左移运算符()、右移运算符(>>)和无符号右移运算符(>>>)。这些运算符能够以位运算的方式高效地完成乘法和除法操作,进而简化代码并提升程序运行效率...
Java提供了丰富的位操作符,如位与(&),位或(|),位异或(^),左移(),右移(>>), 无符号右移(>>>), 位非(~)等。对于两个八位数的乘法,我们可以采用学校课本上经典的长乘法算法,将每个位进行逐位相乘,然后将结果...
Java操作符及其优先级是编程过程中非常重要的概念,理解这些知识点可以帮助我们写出更高效、更准确的代码。本文将深入探讨Java中各种操作符的工作原理和优先级规则。 1. **赋值运算符**: Java中的赋值运算符`=`...
* 运算符是Java语言中的基本操作符,用于执行各种操作。 * 移位运算符包括左移、右移和无符号右移,用于将数字移动到指定的位置。 * 位运算符包括按位与、按位或、按位异或和按位非,用于对数字进行二进制操作。 * ...
5. **位或运算符 (|)**:位或运算符对两个操作数的每一位执行或操作。只要两个操作数的对应位中有1,结果的该位就为1。例如,`5 | 3`,在二进制表示中进行或操作后,结果为 `0000 0000 0000 0000 0000 0000 0000 ...
3.2 使用Java操作符 3.3 优先级 3.4 赋值 3.4.1 方法调用中的别名问题 3.5 算术操作符 3.5.1 一元加、减操作符 3.6 自动递增和递减 3.7 关系操作符 3.7.1 测试对象的等价性 3.8 逻辑操作符 3.8.1 短路 3.9 直接常量 ...
本文将深入探讨Java的基础知识,包括DOS命令、JDK环境搭建、变量、注释和进制转换,以及移位操作符。 首先,DOS命令是Windows操作系统中的基本命令行工具,对于Java开发者来说,熟悉这些命令是非常必要的。例如,`...
* Java是一种跨平台的语言,Java程序可以在不同的操作系统中运行 * Java的跨平台主要是由于Java虚拟机(JVM)的存在 Socket编程 * Socket是指网络编程中的一个概念,用于实现网络通信 * Java中提供了多种Socket...
移位操作符 逻辑操作符 简化运算 字符串操作符 特殊操作符 ?: (条件操作符) , (逗号操作符) delete new this typeof void 第三章 语句 这一章描述了所有 JavaScript 的语句。JavaScript 语句是用特定的...