取反: 在二进制中第一位,1表示符数,0表示正数 byte a = -1; 原码:10000001 反码:11111110 补码:11111111 //异或: 00000000 byte b = -2; 原码:10000010 反码:11111101 补码:11111110 //异或: 00000001 byte c = 3; // 10000101 System.out.println(~a); System.out.println(~b); System.out.println(~c);
运算结果: 0 1 -4
右移:正数右移.负数右移 ,无符号右移
右移的符号是:>>
无符号右移的符号的:>>>
在左右位移时应注意,位移是否超过了数据的长度,如果超过了就会进行取摸运算等:下面的代码中有测试到
//右移: //右移一个正数,右移一个整数每次在左边补0 int a = 5; System.out.println(a>>1); //原码; 0000000101 //右移一位: 0000000010 System.out.println(a>>2); //原码; 0000000101 //右移两位: 0000000001 System.out.println(a>>3); //原码; 0000000101 //右移三位: 0000000000 System.out.println(a>>31); //原码; 0000000101 //右移32位: 0000000000 System.out.println(a>>32); //int 为32位,当位移等于32时,相当于没有移动,会进行取摸运算 System.out.println(a>>34); //位移大于32时,进行取摸运算 34%32 = 2 //此时相当于位移两位 System.out.println(a>>>1); //无符号右移最高位补0 // 原码: 0000000101 //无符号右移 : 0000000010 2
运算结果: 2 1 0 0 5 1 2
负数右移:
//右移一个负数,右移一个整数每次在左边补1 //位移负数,应先将其装换成补码形式,再位移 int a = -5; //原码:100000101 //反码:111111010 反码是和原码的数相反 第一位相同(符号位) //补码:111111011 补码在反码后面加1 System.out.println(a>>1); //补码:111111011 //补码右移一位: 111111101 -3 System.out.println(a>>2); //补码:111111011 //补码右移两位: 111111110 -2 System.out.println(a>>3); //补码:111111011 //补码右移三位: 111111111 -1 System.out.println(a>>4); //补码:111111011 //补码右移四位: 111111111 -1 System.out.println(a>>31); //补码:111111011 //补码右移31位: 111111111 -1 System.out.println(a>>32); //int为32 位的数,在位移时,等于没有移动 -5 System.out.println(a>>34); //int 为32位的,位移34会进行取摸运算 34%32 =2 -2 System.out.println(a>>>1); //无符号负数的右移在最高位补1; //补码:111111011 //无符号右移1位:011111101 此时负数将变成一个正数
-3 -2 -1 -1 -1 -5 -2 2147483645
左移:
左移的符号:<<
左移无符号的正负数的符号:<<<
左移的右边补0
//左移正数 int a = 5; //补码:00000101 System.out.println(a<<1); //00001010 10 System.out.println(a<<2); //00010100 20 System.out.println(a<<31); //为一个负数,左移应注意
运算结果: 10 20 -2147483648
左移负数:
左移都是右边补0
int a = -5; //补码:11111011 System.out.println(a<<1); //左移一位:11110110 -10 System.out.println(a<<2); //左移两位:11101100 -20 System.out.println(a<<31); //左移31会出现问题 System.out.println(a<<34); //相当于左移两位 //左移两位:11101100 -20
运算结果: -10 -20 -2147483648 -20
使用位移来求二进制的问题:
public static void main(String[] args) { //通过右移将十进制的数转换成二进制 int a = 100; for(int i =31;i>0;i--){ System.out.print(a>>i&1); } }
运算结果: 0000000000000000000000000110010
相关推荐
7. 无符号右移(>>>): 对于无符号右移,无论正负,右边都用0填充。 三、位运算的实际应用 1. 位掩码:通过位运算和位掩码,我们可以快速地检查、设置或清除特定的位,例如在权限控制、状态标志等场景。 2. 数据压缩...
位操作是直接在二进制位级别上进行的运算,包括位与(&)、位或(|)、位异或(^)、位非(~)、左移()、右移(>>)和无符号右移(>>>). 这些操作符允许我们高效地处理数字,有时甚至比使用常规算术运算更快。 标题"java代码-...
Java支持三种类型的移位运算:左移(),右移(>>)和无符号右移(>>>)。左移运算符将二进制数的所有位向左移动指定的位数,空出的位置由0填充。例如,`5 的结果是20,因为5的二进制形式是0101,左移两位后变为...
位运算符包括按位与(&),按位或(|),按位异或(^),按位非(~),左移(),右移(>>)和无符号右移(>>>). 1. 按位与(&):两个操作数相应位上都为1时,结果位上才为1;否则为0。 2. 按位或(|):两个操作数相应位上至少有一...
此外,Java还提供了三种移位运算符:左移(), 带符号右移(>>), 无符号右移(>>>). 左移将所有位向左移动指定次数,右移则向右移动,带符号右移会根据符号位填充,无符号右移则一律用0填充。 移位运算符的优先级高于...
位运算可以直接对二进制数进行操作,例如按位与(&),按位或(|),按位异或(^),左移(),右移(>>),无符号右移(>>>). 在本题解中,可能会用到位运算来快速统计行或列中1的数量,从而确定是否需要反转。 知识点4:数据...
// 1073741823 (无符号右移,负数的补码处理) ``` 位运算在某些特定场景下非常有用,例如: - **高效计算**:位运算通常比算术运算快,因此在性能敏感的代码中,可以用来替代简单的算术操作,如快速除以2(右移一...
无符号右移在处理二进制数据时特别适用于保持数据的完整性,特别是处理二进制编码格式(如IP地址或颜色编码)时。 通过了解这些概念,开发者可以编写出更为高效且精确的代码,尤其是在处理大量数据或进行低级别的...
- `>>`:无符号右移。 - `左移。 - **赋值运算符**: - `=`:简单的赋值运算符。 - `+=`, `-=`,`*=`,`/=`,`%=`:复合赋值运算符,它们简化了赋值语句,使得代码更简洁。 #### 五、运算符优先级 - **运算符...
此外,还有位移运算符,如`>>`(右移)、`>>>`(无符号右移)、`(左移),以及相应的复合赋值运算符,如`&=`、`|=`、`^=`、`>>=`、`>>>=`、`。 #### 二进制表示和负数处理 理解Java如何存储整数值以及如何表示...
位操作主要包括:按位与(&),按位或(|),按位异或(^),按位非(~),左移(),右移(>>或>>>),以及无符号右移(>>>,仅适用于整型和长整型)。这些操作直接作用于二进制表示,对于理解计算机底层工作原理至关重要。 1. *...
在Java中,位运算主要包括按位与(&),按位或(|),按位异或(^),按位非(~),左移(),右移(>>)和无符号右移(>>>). 这些运算符可以在整型变量之间进行,用于直接操作它们的二进制表示。例如,按位与运算符"&"用于两个位...
在Java中,可以使用`>>>`运算符实现无符号右移,相当于循环右移,对于正数和负数都是如此。此外,`运算符用于左移,而`>>`运算符则表示有符号右移,可能会导致负数的非循环移位。循环移码常用于位编码、解码以及位...
- **位运算符**:如`&`(按位与)、`|`(按位或)、`^`(按位异或)、`~`(按位取反)、`(左移)、`>>`(右移)、`>>>`(无符号右移)。 #### 进制转换 1. **其他进制转十进制**: - 将每一位的系数乘以基数的...
7. 无符号右移>>>:无论操作数的符号位如何,都用0填充移出的空位。 二、位操作的应用 1. 数据存储优化:对于只需要存储少量状态或标志位的情况,使用位操作可以节省内存空间,如位字段表示。 2. 高效计算:位操作...
位运算符(如按位与`&`、按位或`|`、按位异或`^`、按位取反`~`、左移`、有符号右移`>>`和无符号右移`>>>`)是针对二进制位进行操作的运算符,它们在处理二进制数据和优化性能时非常有效。例如,按位与`&`运算符,...
位运算符作用于二进制级别,包括按位与(&), 按位或(|), 按位异或(^), 左移(), 右移(>>), 无符号右移(>>>), 以及按位取反(~)。位运算通常在处理位标志或低级别数据操作时使用。 通过实际案例学习和练习这些运算符,...
右移(>>)则向右移动,无符号右移会用0填充空位,有符号右移则保留符号位。 3. **在JNI中使用位操作**:在C/C++代码中,我们可以直接对整型变量进行位操作。例如,`int result = value1 & value2;`表示对`value1`...
7. 无符号右移>>>:无论正负,都用0填充左侧空出的位。 位操作通常用于高效地处理内存中的原始数据,如在内存有限的设备上存储和读取数据,或者实现特定的算法,如快速计算数字的二进制表示。 二、BitUtils工具库 ...