`

理解Java移位操作

    博客分类:
  • Java
 
阅读更多

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 移位运算符是编程语言中用于处理二进制位的...总的来说,Java的移位运算符是编程中不可或缺的工具,它们提供了对二进制位的直接控制,能够实现高效的位操作,这对于理解计算机底层机制和编写高性能代码至关重要。

    JAVA基础之java的移位运算

    - 当对byte或short类型进行移位操作时,它们会被提升为int类型,因此移位结果可能超出原始类型的范围,需要额外处理。 - 左移可能会导致符号位丢失,尤其是对负数左移过多位时。 - 右移时,如果原始值为负数,符号位...

    Java移位运算符1

    在Java编程语言中,移位运算符是一种高效的方式来进行位操作,它们对于处理二进制数据和进行快速的乘法、除法等计算非常有用。本文将深入探讨Java中的三种移位运算符:左移运算符(),右移运算符(&gt;&gt;)以及无符号右...

    java实现大周期线性反馈移位寄存器

    线性反馈移位寄存器(Linear Feedback Shift Register,简称LFSR)是密码学、通信和计算机科学中的一种重要工具,它通过一系列线性函数操作来改变寄存器中的位序列,从而产生周期性的伪随机序列。这些序列在密码学中...

    java基于移位操作实现二进制处理的方法示例

    Java语言中的移位操作是处理二进制数据时非常高效...理解并熟练掌握移位操作是提升Java编程能力的重要一环,尤其是在处理效率敏感的代码时。通过实际编程练习,可以更好地理解和运用这些操作,提升代码的效率和可读性。

    Java移位运算符详解实例(小结)

    Java移位运算符是Java语言中的一种基本运算符,用于对二进制数进行位移操作。移位运算符主要包括左移位运算符()、右移位运算符(&gt;&gt;&gt;)和带符号的右移位运算符(&gt;&gt;)。这些运算符可以单独用来处理int型整数。 1. ...

    Java中的进制与移位运算符

    在阅读和分析像"Control_12.java"这样的源码文件时,理解进制转换和移位运算符的原理至关重要,这有助于我们解析代码逻辑,提高代码效率。 总的来说,Java中的进制表示法和移位运算符是程序员必备的技能,它们不仅...

    文件移位加密与解密

    程序的核心部分在于读取文件内容,然后根据用户输入的密钥进行移位操作,最后输出加密或解密后的结果。程序还包含了一个无限循环,允许用户多次进行加密或解密操作而无需重新启动程序。 #### 程序关键代码解析 ```...

    移位算法文件加密解密

    移位算法在信息安全领域是一种常见的加密技术,它基于字符或数据块的位移操作来实现信息的隐藏。...然而,理解移位算法仍然是理解更复杂加密系统的基础,同时也能够帮助我们更好地理解和评估各种加密技术的安全性。

    java位运算符之左移操作视频

    左移操作符()是位运算符之一,它在Java中有着特定的应用和理解。本篇文章将深入探讨Java中的左移操作符及其相关知识点。 一、位运算符概述 位运算符直接作用于二进制位,它们包括:左移(),右移(&gt;&gt;),无符号...

    LFSR线形反馈移位寄存器

    LFSR通过移位操作和线性反馈功能,能够生成一系列看似随机的数据序列,这些序列在统计上具有良好的均匀性和不可预测性。 LFSR的基本工作原理是基于移位寄存器的。移位寄存器是一种存储设备,它包含若干个存储单元...

    Java操作符的优先级和结合性

    在Java编程语言中,操作符的优先级和结合性是理解和编写正确...总的来说,理解Java操作符的优先级和结合性是提高代码可读性和减少错误的关键。通过熟练掌握这些规则,开发者可以更有效地构建和维护他们的Java应用程序。

    CoreJava全套详细笔记资料.pdf

    CoreJava全套详细笔记资料.pdf CoreJava是Java编程语言的核心部分,涵盖了...通过对CoreJava全套详细笔记资料的学习,我们可以更好地理解Java语言的基础知识和高级应用,从而提高自己的编程能力和解决问题的能力。

    浅析java移位符的具体使用

    浅析java移位符的具体使用 左移运算符() * 左移运算符的定义:左移运算符是一种二进制运算符,它将操作数的二进制码整理左移指定位数,左移后右面空出的位用0来补充。 * 左移运算符的原理:在计算机系统中,数值...

    【IT十八掌徐培成】Java基础第02天-04.运算符-移位运算-逻辑运算.zip

    本资料主要讲解了Java中的运算符,特别是移位运算和逻辑运算,这两部分是理解数据处理和程序控制的关键。 首先,我们来探讨移位运算。Java支持三种类型的移位运算:左移(),右移(&gt;&gt;)和无符号右移(&gt;&gt;&gt;)。左...

    祖冲之密码算法Java实现

    1. **Java基本编程**:理解和掌握Java的基础语法,包括变量、条件语句、循环、数组和类等。 2. **位操作**:祖冲之算法涉及到大量的位操作,如位移、按位与、按位或、按位异或等,因此需要熟练使用Java的位运算符。...

    Java中的位运算

    左移位操作符(`)将操作数的所有位向左移动指定的位数,高位丢弃,低位补0。例如: ```java public class LeftMoving { public static void main(String[] args) { System.out.println("5(5 )); } } ``` 输出...

    加密与解密(java课程设计)

    总的来说,这个Java课程设计旨在帮助学生掌握加密和解密的基本原理,以及如何使用Java来实现这些操作。通过实践,不仅可以提升编程技能,还能增强对信息安全的理解,为未来的项目提供安全保障。

    数组循环移位操作实例

    在编程领域,数组循环移位操作是一种常见的数组处理方法,特别是在数据结构和算法设计中。循环移位,也称为旋转,是指将数组中的元素按照指定的步长向左或向右移动,移动过程中数组的首尾元素会形成一个新的序列。在...

Global site tag (gtag.js) - Google Analytics