一、java中位运算符,(byte) 0x80 的那个,为何答案是-32
0x80表示 128,(0x代表 16进制,8* 16¹+ 0* 16º= 128),128的二进制是 10000000,即 2的 7次方。
byte共有 8位,表示范围是-128~ 127,二进制即 10000000~ 01111111,第一位为符号位,1表示负数,0表示整数,11111111即表示-127,10000000比较特殊,表示-128。所以,0x80本来是整数的 128,二进制 00000000000000000000000010000000(Java中整数4个字节32位)。(byte)0x80,将其转换为 byte,即截取最后 8位,即 10000000,就是 byte中的-128。
>>表示右移操作,右移一位表示除以 2。(byte)0x80>> 2,表示将(byte)0x80右移两位,那么就是-128÷ 2÷ 2=-32。
二、64位的Java与32位的有什么不同
所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据。
如果我们将总长128位的指令分别按照16位、32位、64位为单位进行编辑的话:旧的16位处理器,比如Intel 80286 CPU需要8个指令,32位的处理器需要4个指令,而64位处理器则只要两个指令,显然,在工作频率相同的情况下,64位处理器的处理速度会比16位、32位的更快。而且除了运算能力之外,与32位处理器相比,64位处理器的优势还体现在系统对内存的控制上。
由于地址使用的是特殊的整数,而64位处理器的一个ALU(算术逻辑运算器)和寄存器可以处理更大的整数,也就是更大的地址。传统32位处理器的寻址空间最大为4GB,使得很多需要大容量内存的数据处理程序在这时都会显得捉襟见肘,形成了运行效率的瓶颈。
而64位的处理器在理论上则可以达到1800万个TB,1TB等于1024GB,1GB等于1024MB,所以64位的处理器能够彻底解决32位计算系统所遇到的瓶颈现象,速度快人一等,对于那些要求多处理器可扩展性、更大的可寻址内存、视频/音频/三维处理或较高计算准确性的应用程序而言,AMD 64处理器可提供卓越的性能。
理论上来说32位的JVM有4G的堆大小限制。但是因为各种条件限制比如交换区,内核地址空间使用,内存碎片,虚拟管理机的管理开销,实际上可用的堆的大小远远比理论上的4G要少。
在32位windows的机器上,堆最大可以达到1.4G至1.6G。
在32位solaris的机器上,堆最大可以达到2G
而在64位的操作系统上,32位的JVM,堆大小可以达到4G
三、java的基本数据类型有哪些
java的基本数据类型有:
1、布尔型(boolean)
取值范围:True或 False
2、字节型(byte)
取值范围:0- 255
3、短整型(short)
取值范围:-32,768~ 32767
4、整型(int)
取值范围:-2,147,483,648~ 2,147,483,647
5、长整型(long)
取值范围:-9223372036854775808~9223372036854775807
6、单精度浮点型(float)
负数范围:
-3.402823E38~-1.401298E-45
正数范围:
1.401298E-45~ 3.402823E38
7、双精度浮点型(double)
负数范围:
-1.797,693,134,862,32E308~
-4.940,656,458,412,47E-324
正数范围:
4.940,656,458,412,47E-324~
1.797,693,134,862,32E308
8、字符型(char)
取值范围:'\u0000'~'\ufff'
扩展资料
任何数据类型的数组都需要 20个字节的内存空间,加上每一数组维数占 4个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。
例如,以 4个 2字节之 Integer数据元所组成的一维数组中的数据,占 8个字节。这 8个字节加上额外的 24个字节,使得这个数组所需总内存空间为 32个字节。
参考资料:百度百科——数据类型