`
jaesonchen
  • 浏览: 311469 次
  • 来自: ...
社区版块
存档分类
最新评论

java 类型扩展和移位运算

 
阅读更多

 

byte b = -1;

System.out.println((int)(char) b);    //65535
System.out.println(b & 0xFF);         //255
			
char c = 65535;
System.out.println((int) c);       //65535
System.out.println((short) c);    //-1
System.out.println((short) c & 0xffff);    //65535
System.out.println((short) (c & 0xffff));  //-1
    byte——>char 因为byte是一个有符号类型,而char是个无符号类型,将一个整数类型转换为另一个宽度更宽的整数类型时,通常是保持其数值,但是却不能将一个负的byte数值表示成一个char,因此,从byte到char转换被认为不是一个拓展原始类型的转换,而是一个拓展并窄化原始类型的转换:所有byte先转换成int,int又被转换成char。

 

 

 

 

<<运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

>>运算规则:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。

>>>运算规则:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。

 

    左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。 “有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。
  若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。若对一个long值进行处理,最后得到的结果也 是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。但在进行“无符号”右移位时,也可能遇到一个问题。若对byte或 short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出)。它们会自动转换成int类型,并进行右移位。但“零扩展”不会发生,所以在那些情况下会得到-1的结果。  

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    JAVA基础之java的移位运算

    Java的移位运算涉及到整数类型数据的二进制位操作,这对于理解计算机底层运作和优化代码至关重要。移位运算主要包括左移运算符()和右移运算符(&gt;&gt;,&gt;&gt;&gt;)。在Java中,所有的整数类型(除了char类型外)都是有符号...

    java 移位运算符的资源

    而Java.jpg可能是一个与课程或教程相关的图片,展示了一些移位运算的例子或图解,帮助学习者更好地理解这一概念。 总的来说,Java的移位运算符是编程中不可或缺的工具,它们提供了对二进制位的直接控制,能够实现...

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

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

    java位运算大全.pdf

    此外,无符号右移运算符(&gt;&gt;&gt;)在Java中只适用于int和long类型,而对byte和short类型进行右移时,会自动将操作数扩展为int类型再进行运算。 Java语言还提供了位移赋值运算符,如、&gt;&gt;=和&gt;&gt;&gt;=,这些运算符将位移和赋值...

    文件移位加密与解密

    在现代计算机科学中,这种方法被扩展到了文件层面,不仅限于字母,还可以包括数字和其他字符。 ### C语言实现 在给定的部分内容中,可以看到程序使用了C语言标准库中的`stdio.h`和`stdlib.h`头文件,这些都是进行...

    Java三种移位运算符原理解析

    如果右移的运算数是byte和short类型时,将自动把这些类型扩大为int型。 右移运算符的数学意义是右移一位相当于除2,右移n位相当于除以2的n次方。 例如,11 &gt;&gt; 2(11为int型)把11转换为二进制数字0000 0000 0000 ...

    Rijndael扩展算法及其JAVA实现

    在Java中实现扩展Rijndael算法的关键在于如何处理更大的明文和密钥矩阵。这不仅涉及到矩阵操作的优化,还需要对算法的核心步骤进行适当的调整以适应不同的输入大小。 - **矩阵操作**:可以利用Java内置的数据结构...

    java面向对象程序设计基础知识总结

    在 Java 中,进行移位运算时,因为 int 是占 32 位,进行移位的数是 32 的模,long 占 8 字节也就是 64 位,所以移位的数是 64 的模,byte、short 进行右移位运算,会自动转换成 int 类型。 12. 左移运算 左移运算...

    core java 小结

    符号扩展和无符号扩展也是理解补码的关键,而移位操作如右移(`&gt;&gt;`)、左移(`)和逻辑右移(`&gt;&gt;&gt;`)则用于改变数值。 #### 六、BMP文件格式 BMP文件的头2-5字节存储着图像文件的大小,这对于解析和处理BMP图像至关重要...

    2013年Java面试题大全附参考答案(一)

    5. 关于Java中的位运算,例如移位操作,使用左移()是高效的计算乘以2的幂次方的方法。Java对位运算进行了优化,让CPU可以更快地执行这些操作。 6. 当涉及到变量的类型转换时,需要特别注意在将较小的数值类型赋值...

    Java SE编程入门教程 java封装继承多态(共56页).pptx

    14. **位运算**:Java支持按位逻辑运算、按位移位运算和按位按位与、或、异或运算,常用于低级别的数据处理。 15. **正则表达式**:Java的`java.util.regex`包提供了正则表达式的处理,用于文本匹配和替换。 16. *...

    java中的移位运算符心得总结

    这些运算符可以对整数类型的变量进行位ewise操作,实现数字的移位和扩展。 1. 左移运算符() 左移运算符()是将操作数左移指定的位数。左移运算符的规则是,将操作数的二进制数左移指定的位数,空位补零。例如,...

    第一章 java基础

    - **基本数据类型**:Java提供了八种基本数据类型,包括四种整数类型(`byte`、`short`、`int`、`long`)、两种浮点类型(`float`、`double`)、一个字符类型(`char`)和一个布尔类型(`boolean`)。 3. **Java...

    经典面试宝典 包含各类题型java +逻辑推理

    例如,计算2乘以8可以通过左移位运算`2 实现,效率更高。 以上知识点不仅涵盖了面向对象的基本概念,还包括了Java语言的一些关键特性,以及在实际编程过程中可能会遇到的一些常见问题及其解决方案。这对于准备Java...

    Java选择题[归类].pdf

    本题目的内容主要涵盖了Java的基础知识,包括语法、数据类型、内存管理、类和对象、运算符以及编译过程等多个方面。 1. Java的特点:Java的特点包括面向对象(B)、动态性(A)、编译型(D,虽然Java是解释执行,但...

    基于Misty1算法的加密软件(JAVA)的实现(源代码+论文).zip

    它可能会讨论Misty1算法如何抵抗已知的密码攻击,如差分攻击和线性攻击,以及JAVA实现中可能遇到的性能优化问题,比如如何减少内存消耗和提高运算速度。 通过阅读论文和研究源代码,开发者不仅可以了解Misty1算法的...

    java 大数类 计算器 文件比较

    大数类计算器的实现通常基于数学原理,例如使用长除法或扩展欧几里得算法来进行大整数的除法和求最大公约数。此外,为了优化性能,BigInteger还支持位操作,如`and()`, `or()`, `xor()`以及移位操作。 文件比较是另...

    《Java面向对象编程》练习题.docx

    【Java面向对象编程】练习题解析 ...这些练习题覆盖了Java的基础知识,包括版本分类、环境变量配置、程序结构、数据类型、逻辑运算、表达式求值以及标识符规则。通过解答这些问题,可以加深对Java编程基础的理解。

    java运算符大全

    16. **带符号右移位运算符** (&gt;&gt;): 根据符号位扩展,向右移动指定位数,高位补0(正数)或1(负数)。 17. **无符号右移运算符** (&gt;&gt;&gt;): 不考虑符号位,向右移动指定位数,高位用0填充。 18. **小于运算符** (&lt;): ...

Global site tag (gtag.js) - Google Analytics