1. 理解移位操作之前先要弄清楚什么是原码、反码和补码
所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
原码10010 -> 反码11101 (10010,1为符号码,故为负)
(11101) 二进制= -2 十进制
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
例如:
原码
[+7]原= 0 0000111 B
[-7]原= 1 0000111 B
反码
[+7]反= 0 0000111 B
[-7]反= 1 1111000 B
补码
[+7]补= 0 0000111 B
[-7]补= 1 1111001 B
2. 移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:
<<(左移)、>>(带符号右移)和>>>(无符号右移)。
在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是
移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,
也就是移动66次和移动2次得到的结果相同。
三种移位运算符的移动规则和使用如下所示:
<<运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
语法格式:
需要移位的数字 << 移位的次数
例如: 5<<1,则是将数字5左移1位
计算过程:
5<<1
首先把5转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0101,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移1位,
最后在低位(右侧)的一个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1010,则转换为十进制是10.数学意义:
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
-5<<1 =-10
>>运算规则:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1.
如果最高位是0,那么左边最高位就补0; 如果最高位是1,那么左边最高位就补1(负数要用补码,正数补码跟原码一样)
语法格式:
需要移位的数字 >> 移位的次数
例如5>>2=1,则是将数字5右移2位
计算过程:5的二进制形式为:0000 0000 0000 0000 0000 0000 0000 0101,然后把低位的最后两个数字移出,因为该数字是正数,所以在
高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0001.转换为十进制是1.
数学意义:右移一位相当于除2,右移n位相当于除以2的n次方(不能整除的用取整)。
例如-5>>2=-2 则是将数字-5右移2位
计算过程:
-5的二进制形式:1000 0000 0000 0000 0000 0000 0000 0101
转换成补码:1111 1111 1111 1111 1111 1111 1111 1011
移位高位补1:1111 1111 1111 1111 1111 1111 1111 1110
再转换成原码:1000 0000 0000 0000 0000 0000 0000 0010
得到结果-2
>>>运算规则:按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。
其他结构和>>相似。
-5>>>2 = 2^30-2
原码 1000 0000 0000 0000 0000 0000 0000 0101
反码 1111 1111 1111 1111 1111 1111 1111 1010
补码 1111 1111 1111 1111 1111 1111 1111 1011
无符号右移两位 0011 1111 1111 1111 1111 1111 1111 1110 +2-2
0100 0000 0000 0000 0000 0000 0000 0000 -2 = 2^30-2
5>>>2=1 和5>>2 相同
相关推荐
Java 移位运算符是编程语言中用于处理二进制位的...总的来说,Java的移位运算符是编程中不可或缺的工具,它们提供了对二进制位的直接控制,能够实现高效的位操作,这对于理解计算机底层机制和编写高性能代码至关重要。
- 当对byte或short类型进行移位操作时,它们会被提升为int类型,因此移位结果可能超出原始类型的范围,需要额外处理。 - 左移可能会导致符号位丢失,尤其是对负数左移过多位时。 - 右移时,如果原始值为负数,符号位...
在Java编程语言中,移位运算符是一种高效的方式来进行位操作,它们对于处理二进制数据和进行快速的乘法、除法等计算非常有用。本文将深入探讨Java中的三种移位运算符:左移运算符(),右移运算符(>>)以及无符号右...
线性反馈移位寄存器(Linear Feedback Shift Register,简称LFSR)是密码学、通信和计算机科学中的一种重要工具,它通过一系列线性函数操作来改变寄存器中的位序列,从而产生周期性的伪随机序列。这些序列在密码学中...
Java语言中的移位操作是处理二进制数据时非常高效...理解并熟练掌握移位操作是提升Java编程能力的重要一环,尤其是在处理效率敏感的代码时。通过实际编程练习,可以更好地理解和运用这些操作,提升代码的效率和可读性。
Java移位运算符是Java语言中的一种基本运算符,用于对二进制数进行位移操作。移位运算符主要包括左移位运算符()、右移位运算符(>>>)和带符号的右移位运算符(>>)。这些运算符可以单独用来处理int型整数。 1. ...
在阅读和分析像"Control_12.java"这样的源码文件时,理解进制转换和移位运算符的原理至关重要,这有助于我们解析代码逻辑,提高代码效率。 总的来说,Java中的进制表示法和移位运算符是程序员必备的技能,它们不仅...
移位算法在信息安全领域是一种常见的加密技术,它基于字符或数据块的位移操作来实现信息的隐藏。...然而,理解移位算法仍然是理解更复杂加密系统的基础,同时也能够帮助我们更好地理解和评估各种加密技术的安全性。
左移操作符()是位运算符之一,它在Java中有着特定的应用和理解。本篇文章将深入探讨Java中的左移操作符及其相关知识点。 一、位运算符概述 位运算符直接作用于二进制位,它们包括:左移(),右移(>>),无符号...
LFSR通过移位操作和线性反馈功能,能够生成一系列看似随机的数据序列,这些序列在统计上具有良好的均匀性和不可预测性。 LFSR的基本工作原理是基于移位寄存器的。移位寄存器是一种存储设备,它包含若干个存储单元...
在Java编程语言中,操作符的优先级和结合性是理解和编写正确...总的来说,理解Java操作符的优先级和结合性是提高代码可读性和减少错误的关键。通过熟练掌握这些规则,开发者可以更有效地构建和维护他们的Java应用程序。
在Java编程语言中,移位运算符是一种特殊且功能强大的工具,允许程序员以一种高效的方式操作二进制数据。本文将详细解析Java中移位运算符的具体使用方法,包括左移运算符()、右移运算符(>>)以及无符号右移运算符...
CoreJava全套详细笔记资料.pdf CoreJava是Java编程语言的核心部分,涵盖了...通过对CoreJava全套详细笔记资料的学习,我们可以更好地理解Java语言的基础知识和高级应用,从而提高自己的编程能力和解决问题的能力。
无论采用哪种方法,对数组循环移位操作的理解和掌握都是至关重要的,它不仅有助于提升程序员的编程技巧,还能在处理实际问题时提供帮助。 总而言之,通过本文所展示的数组循环移位操作实例,我们可以看到,即使是一...
《Java核心技术——CoreJava重点笔记》 Java是一种广泛使用的...理解并掌握这些概念对于深入学习Java编程至关重要。在实际开发中,这些基础知识会频繁地被运用,因此扎实的理论基础是成为一名优秀Java程序员的前提。
本资料主要讲解了Java中的运算符,特别是移位运算和逻辑运算,这两部分是理解数据处理和程序控制的关键。 首先,我们来探讨移位运算。Java支持三种类型的移位运算:左移(),右移(>>)和无符号右移(>>>)。左...
1. **Java基本编程**:理解和掌握Java的基础语法,包括变量、条件语句、循环、数组和类等。 2. **位操作**:祖冲之算法涉及到大量的位操作,如位移、按位与、按位或、按位异或等,因此需要熟练使用Java的位运算符。...
左移位操作符(`)将操作数的所有位向左移动指定的位数,高位丢弃,低位补0。例如: ```java public class LeftMoving { public static void main(String[] args) { System.out.println("5(5 )); } } ``` 输出...
总的来说,Java学习中要理解基本类型和引用类型的区别,掌握运算符的使用,特别是移位运算,理解数组和多维数组的声明、分配以及操作,以及字符串的不可变性及其操作方法。这些是编程基础,对于理解和编写Java代码至...
3. **多轮加密**:每个128位的明文块通过一系列的混合和替换操作,包括字节替换(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和加轮密钥(AddRoundKey)。对于128位的密钥,有10轮这样的操作。 4. **...