java 基本数据类型 及 位操作

来源:互联网 发布:女友闺蜜双飞 知乎 编辑:程序博客网 时间:2024/05/16 09:16

一、基本数据类型

JAVA基本数据类型所占字节数是多少?(32位系统)

byte     1字节               
short    2字节               
int      4字节               
long     8字节               
char     2字节(C语言中是1字节)可以存储一个汉字
float    4字节               
double   8字节               
boolean  false/true(理论上占用1bit,1/8字节,实际处理按1byte处理)       
JAVA是采用Unicode编码。每一个字节占8位。你电脑系统应该是 32位系统,这样每个int就是 4个字节
其中一个字节由8个二进制位组成

二、位操作

在计算机中所有数据都是以二进制的形式储存的。

位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快。

方便演示,首先写个二进制打印方法:

 
privatestatic void printNum(int n){
    String num = Integer.toBinaryString(n);
    if(num.length() ==32){
        System.out.println(num);
    }else{
        StringBuilder sb =new StringBuilder("");
        for(inti =0;i <32 - num.length(); i ++){
        sb.append("0");
        }
        System.out.println(sb.toString() + num);
    }
}

1、~操作符(取反),对应二进制位取反,0变成1,1变成0

 
intnum = 3;
printNum(num);
printNum(~num);

 结果如下:

00000000000000000000000000000011
11111111111111111111111111111100

 

2、&操作符(与),对应二进制位进行与操作,都为1时变成1,其他变为0

 
intnum1 = 3;
intnum2 = 7;
printNum(num1);
printNum(num2);
printNum(num1 & num2);

 

结果如下:

00000000000000000000000000000011
00000000000000000000000000000111
00000000000000000000000000000011

 

3、|操作符(或)对应二进制位进行或操作,都为0时变成0,其他变为1

 
intnum1 = 4;
intnum2 = 7;
printNum(num1);
printNum(num2);
printNum(num1 | num2);

 

结果如下:

00000000000000000000000000000100
00000000000000000000000000000111
00000000000000000000000000000111

 

4、^操作符(异或),对应二进制位相同时,该位变成0,否则变成1

 
intnum1 = 5;
intnum2 = 9;
printNum(num1);
printNum(num2);
printNum(num1 ^ num2);

 

结果如下:

00000000000000000000000000000101
00000000000000000000000000001001
00000000000000000000000000001100

 

5、<<操作(左移),二进制位向左移动,右边填充0

 
intnum1 = 5;
printNum(num1);
printNum(num1 <<2);

 结果如下:

00000000000000000000000000000101
00000000000000000000000000010100

6、>>操作(右移),二进制位向右移动,左边填充0

 
intnum1 = 5;
printNum(num1);
printNum(num1 >>2);

 结果如下:

00000000000000000000000000000101
00000000000000000000000000000001

位操作常见应用

1、不使用中间变量交换两个数

 
intnum1 = 2;
intnum2 = 5;
num1 = num1^num2;
num2 = num2^num1;
num1 = num1^num2;
System.out.println("num1:"+ num1 +"\n"+"num2:" + num2 );

 2、求2的N次方

 
//求2的32次方:
System.out.println(Math.pow(2,32));
System.out.println(1L<<32);

 

3、判断奇数偶数

 
intnum1 = 4;
intnum2 = 9;
if(num1%2== 0){
    System.out.println("偶数");
}else{
    System.out.println("奇数");
}
System.out.println((((int)num1&1) ==1) ? "奇数": "偶数");
System.out.println((((int)num2&1) ==1) ? "奇数": "偶数");

 4、求绝对值

 
intnum = -3;
System.out.println(Math.abs(num));
inti = num >> 31
System.out.println(i ==0 ? num : (~num +1));