Java基本数据类型与位运算

赋值运算符

赋值使用操作符“=”。它的意思是“取右边的值(即右值),把它复制给左边(即左值)”。右值可以是任何 常数、变量或者表达式 (只要它能 生成 一个值就行)。但左值必须是一个明确的,已命名的变量。也就是说,必须有一个物理空间可以存储等号右边的值。
分类 基本数据类型 与 类数据类型 的不同
1、 对基本数据类型的赋值是很简单的。基本数据存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到了另一个地方。
2、 但是在为对象“赋值”的时候,情况却放生了变化。对一个对象进行操作,我们真正操作的是对对象的引用。----这种特殊的现象通常称作“别名现象”,是Java操作对象的一种基本方式。
----摘抄自《Thinking In Java》P39

 

 字节、字、bit、byte的关系

1 Byte = 8 Bits
1 KB = 1024 Bytes
1 MB = 1024 KB
1 GB = 1024 MB
bps 是 bits per second 的简称。一般数据机及网络通讯的传输速率都是以「bps」为单位。如56Kbps、100.0Mbps 等等。 
Bps即是Byte per second 的简称。而电脑一般都以Bps 显示速度,如1Mbps 大约等同 128 KBps。

基本数据类型占据的空间大小

byte 占位8个比特,或者说一个字节.由于是有符号的,所以最小时为-128,最大值为+127.
short 占位16比特,两字节.最小值2^15,最大值2^15 -1.
int 占位32比特,4字节.最小值 2^31,最大值2^31 -1
long 占位64比特,8字节.最小值2^63,最大值2^63-1
float 占位32比特,4字节.最小正非零值2^-149,最大正非零值(2-2^-23)·2^127.
double 占64比特,8字节.最小正非零值为2^-1074,最大正非零值为(2-2^-52)·2^1023
char 占位16比特,2字节.主要是为了支持unicode,所以java中的char是双字节,而非C++中的一个字节
boolean 网上说法比较多,不过根据字节码的内容来看,如果是单个boolean变量,则使用int来存储,如果是boolean数组,则用byte来存储。

>> 注意与C/C++的不同

int 在C和C++的占用2个字节,在java中4个字节。
在C++中,char是基础数据类型,8位,1个字节。byte不是基础数据类型,一般是typedef unsigned char byte;这样子的,也就是说,byte其实是unsigned char类型,那么也是8位,1个字节。不同的是,char可以表示的范围是-128-127,而byte可以表示的范围是0-255。
在java中,char和byte都是基础数据类型,其中的byte和C++中的char类型是一样的,8位,1个字节,-128-127。但是,char类型,是16位,2个字节,'\u0000'-'\uFFFF',可以表示0~65535的无符号数。
为什么java里的char是2个字节?
因为java内部都是用unicode的,所以java其实是支持中文变量名的,比如string 世界 = "我的世界";这样的语句是可以通过的。

逻辑运算符

逻辑运算符用于连接布尔型表达式。、
逻辑运算符包括"&","&&","|","||"。
&:表示普通与,所有的判断条件都要依次执行;
&&:若干个条件,如果前面的条件返回false,那么后面不再判断,就是false;
|:表示普通或,所有的判断条件都要依次执行;
||:若干个条件,如果前面的条件返回true,那么后面不再判断,就是true;

>>位运算符

位运算符主要针对二进制,
它包括了:按位与(&)、非(~)、按位或(|)、按位异或(^)。
从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。
&:当两边操作数对应的位同时是1时,结果为1,否则为0。如1100&1010=1000   
|:当两边操作数对应的位只要有一个是1,结果为1,否则为0。如1100|1010=1110   
~:操作数的位,0变1,1变0,这个是单目运算符  
^:当两边操作数对应的位值不同时,结果为1,否则为0。如1100^1010=0110

位移动运算符

位移动运算符主要有三种:
<<(左移):
在没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方 
>>(带符号右移):右移高位补符号位
右移一位相当于除2,右移n位相当于除以2的n次方。
>>>(无符号右移):右移高位补0,
无符号右移运算符只对32位和64位的值有意义

实例验证

 


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

public static void main(String[] args) {

        // 1、左移( << )

        // 0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位补0://

        // 0000 0000 0000 0000 0000 0000 0001 0100 换算成10进制为20

        System.out.println(5 << 2);// 运行结果是20

 

        // 2、右移( >> ) 高位补符号位

        // 0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位补0:

        // 0000 0000 0000 0000 0000 0000 0000 0001

        System.out.println(5 >> 2);// 运行结果是1

 

        // 3、无符号右移( >>> ) 高位补0

        // 例如 -5换算成二进制后为:0101 取反加1为1011

        // 1111 1111 1111 1111 1111 1111 1111 1011

        // 我们分别对5进行右移3位、 -5进行右移3位和无符号右移3位:

        System.out.println(5 >> 3);// 结果是0

        System.out.println(-5 >> 3);// 结果是-1

        System.out.println(-5 >>> 3);// 结果是536870911

 

        // 4、位与( & )

        // 位与:第一个操作数的的第n位于第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0

        System.out.println(5 3);// 结果为1

        System.out.println(4 1);// 结果为0

 

        // 5、位或( | )

        // 第一个操作数的的第n位于第二个操作数的第n位 只要有一个是1,那么结果的第n为也为1,否则为0

        System.out.println(5 3);// 结果为7

 

        // 6、位异或( ^ )

        // 第一个操作数的的第n位于第二个操作数的第n位 相反,那么结果的第n为也为1,否则为0

         System.out.println(5 3);//结果为6

 

        // 7、位非( ~ )

        // 操作数的第n位为1,那么结果的第n位为0,反之。

        System.out.println(~5);// 结果为-6

    }


时间: 2024-12-29 13:09:15

Java基本数据类型与位运算的相关文章

笔记 - Java 进制和位运算

二进制:只有0和1组成的一组数成为二进制数,计算机中的数据都是以二进制形式进行存储的.     通常一个二进制数最高位是1,那么对应的十进制数为负数,如果最高位是0,那么对应的数是正数      八进制:一个二进制数表示成八进制数,将该二进制数从右到左每三位一组,每一组算出对应的十进制数,     每组对应的十进制数连起来就是八进制表现形式.八进制表现形式最高是7      十进制:常用的数都是十进制数. 十六进制:0-9,a-f或A-F的表现形式,a-f表示的是10-15     一个数表现为

[大数据量]java移位运算与位运算与数据类型的存储

站在巨人的肩膀上,参考其他博客文章,汇总于此:  1G=1024M=1024K=1024BYTE=8BIT  Java数据类型的存储:(举例说明) 问:int 型的在内存中怎么存储,假设 int a=21:那么a是怎么被存到计算机里的.怎样把 a 变成二进制数. 怎么样把 a 存到 byte[]数组中? 答:int占4个字节,byte是1个字节,每个字节8位. 所以2进制的话,int最多可以表示正负一共2的32次方个数,byte则是2的8次方. e.g. int=21;在计算机中表示为00000

Java的位运算(bitwise operators)

Java的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括long.int.short.char和 byte,位运算符具体如下表: 运算符 说明 << 左移位,在低位处补0 >> 右移位,若为正数则高位补0,若为负数则高位补1 >>> 无符号右移位,无论正负都在高位补0 & 与(AND),对两个整型操作数中对应位执行布尔代数,两个位都为1时输出1,否则0. | 或(OR),对两个整型操作数中对应位执行布尔代数,两个位

Java位运算总结

  这是自己4年前的Java学习笔记,现发布在ITEye留作纪念,同时也希望对那些刚刚接触Java的童鞋们有些许帮助.              情如痕,缘似印,奈何情深缘浅海誓山盟空对月,流尽痴泪只为你我心再近,踏破情路惟愿红尘有你.                                                                                                                                    

Java千百问_03基本语法(005)_二进制是怎样做位运算的

二进制是怎样做位运算的 程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说白了,就是直接对整数在内存中的二进制位进行操作.其他运算符看这里:java种的运算符都有哪些 大部分运算流程都是先将整数转换为二进制,然后进行相应二进制操作.常见的操作有如下几种: 下面我们详细说明,运算符的优先级看这里:java运算符的优先级是怎样的 1.按位与 and 两个二进制数进行按位与操作:相同位的两个数字都为1,则为1:若有一个不为1,则为0. 例如:00101 & 11100 = 00100 通常

java位运算&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;负位运算

问题描述 java位运算>>>负位运算 请教大神 -100 >>> -1 -100 >>> 1 如何计算的 解决方案 [负数最高位为1,正数为0] [-10转换为二进制数: 10转为2进制数--> 1010 --求反--> 0101 --加1--> 0110 --补位--> 1***1 0110 -10转换为二进制数:11111111111111111111111111111111111111111111111111111111

java 简单的位运算

问题描述 java 简单的位运算 int i=0xaabbccdd : byte b1=0xdd: byte b2=0xcc: byte b3=0xbb: byte b4=0xaa: 使用位运算将i变为0xddccbbaa 解决方案 Java位运算Java位运算JAVA中的位运算 解决方案二: b1是不是0xdd? b1*16^6+b2*16^4+b3*16^2+b4

java位运算加密示例_java

创建一个类,通过位运算中的"^"异或运算符把字符串与一个指定的值进行异或运算,从而改变字符串每个字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,再与那个指定的值进行异或运算,实现把加密后的字符串还原为原有字符串的值. 复制代码 代码如下: import java.util.Scanner;public class Example {    public static void main(String[] args) {        Scanner sc

代码-java 简单的位运算

问题描述 java 简单的位运算 用位运算将int i=0xaabbccdd 变成 i=0xddccbbaa,我不知道自己写的代码哪里错了,希望各位可以指出,谢谢 解决方案 Java 位运算java 位运算Java 中的位运算 解决方案二: a1错了,应该是左移6位,即 <<64 解决方案三: a3也错了,应该是左移2位,即 <<4 解决方案四: 这是用c++编写的,最简单的程序.记得负数右移,补的是符号位. 解决方案五: t = (t1<<24)|(t2<<