Java中的运算符

android studio跑的程序。
基础知识
byte 1字节 8位
short 2字节 16位
int 4字节 32位
long 8字节 64位
float 4字节 32位
double 8字节 64位
char 2字节 16位(java采用unicode)
位运算符:按位与(&);按位或(|);异或(^);取反(~),左移(<<) ;右移(>>);无符号右移(>>>)。
位运算符是二进制操作。在操作位移符号(<<、>>、>>>)时,char、byte、short类型会自动提升为int类型。
代码

int x = 2;
Log.d(TAG, "x : " + Integer.toBinaryString(x));   
Log.d(TAG, "~x: " + Integer.toBinaryString(~x));   
int y = 1;
Log.d(TAG, "onCreate: " + Integer.toBinaryString(x & y));
//1&1=1 0&1=0 0&0=0  10&01=00(位和位与)
Log.d(TAG, "onCreate: " + Integer.toBinaryString(x | y)); 
//1&1=1 0&1=1 0&0=0  10|01=11(位和位或)
Log.d(TAG, "onCreate: " + Integer.toBinaryString(x ^ y));
//相同输出0 不同输出1 (位和位异或)

这里写图片描述

int i = -1; 
Log.d(TAG, "onCreate: " + Integer.toBinaryString(i));
//负数在计算机中的存储形式是其同值正数的补码   
//int 正1的原码是000000000000000000000001
//int 正1的反码是(原码各位取反)11111111111111111111111111111110
//int 正1的补码是(反码末位加1)11111111111111111111111111111111
i = -2;
Log.d(TAG, "i = -2 : " + Integer.toBinaryString(i)); 
i = -3; 
Log.d(TAG, "i = -3 : " + Integer.toBinaryString(i));
i = -4;
Log.d(TAG, "i = -4 : " + Integer.toBinaryString(i));  

这里写图片描述

int i = 5;  
Log.d(TAG, "i : " + Integer.toBinaryString(i));
Log.d(TAG, "i<<2: " + Integer.toBinaryString(i << 2));
//i=5 i为int  00000000 00000000 00000000 00000101
//向左移动两位 空位补0  00000000 00000000 00000000 00010100
Log.d(TAG, "i>>2: " + Integer.toBinaryString(i >> 2));
//向右移动两位 i为正数 空位补0  00000000 00000000 00000000 00000001
i = -5;
Log.d(TAG, "i=-5: " + Integer.toBinaryString(i));
Log.d(TAG, "i=-5  i>>2: " + Integer.toBinaryString(i >> 2));
//向右移动两位 i为负数 空位补1  11111111 11111111 11111111 11111110
Log.d(TAG, "i=-5 i>>>2: " + Integer.toBinaryString(i >>> 2));
//无符号右移两位 不管正负  空位补0  00111111 11111111 11111111 11111110

这里写图片描述

byte b = -1;        
Log.d(TAG, "onCreate: " + Integer.toBinaryString(b));        
b >>>= 10;        
//byte为8位,这里用的Integer提升为32位(这里和位移符号的默认提升为int是两码事)        
//也就是11111111111111111111111111111111        
//无符号右移10 为 00000000001111111111111111111111        
//计算完赋值给byte b, byte 为八位 取后八位 首位是1 所以还为-1       
 Log.d(TAG, "onCreate: " + Integer.toBinaryString(b));

这里写图片描述

int i = 5;         
Log.d(TAG, "i = -1 : " + Integer.toBinaryString(i<<34));       
//Think in Java 中有提到int类型只有右侧的5个低位有用(因为2的5次幂也就是32),这右侧的五个低位指的是34的五个低位,     
//34的二进制是00100010,也就是00010有用,00010的十进制为2所以移动两位。           
long l=5;       
Log.d(TAG, "i = -1 : " + Integer.toBinaryString(i<<67));       /
/long为低6位。

这里写图片描述

在排序算法中数据交换可以用异或来进行交换。

int a=4,b=2;
    a^=b;
    b^=a;
    a^=b;
//4的二进制位100 2的二进制为10
//a^=b  a=100^10=110
//b^=a  b=10^110=100
//a^=b  a=110^100=10
//a=2  b=4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值