Java基本数据类型以及位运算

1 基本数据类型

Java基本类型共有八种:字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。

简单类型booleanbytecharshortIntlongfloatdouble
二进制位数18161632643264
最大存储数据量/256/655362^322^64//
数据范围/-128~127/-216~ 216-1-231~231-1-264~264-1//
封装器类BooleanByteCharacterShortIntegerLongFloatDouble

Java提供的位运算符有:左移(<<)、右移(>>) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符。

2 位运算

2.1 左移( << )

5<<2

0000 0000 0000 0000 0000 0000 0000 0101 左移2位,正负数低位都补0:

0000 0000 0000 0000 0000 0000 0001 0100 换算成10进制为20,变大了2^2倍

2.2 右移( >> )

5>>2

0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位补0:
0000 0000 0000 0000 0000 0000 0000 0001 换算成10进制为1,精度损失

-5>>2

1111 1111 1111 1111 1111 1111 1111 1011 然后右移2位,负数高位补1:

1111 1111 1111 1111 1111 1111 1111 1111 换算成10进制为-1,精度损失

2.3 无符号右移( >>> )

-5>>>3

1111 1111 1111 1111 1111 1111 1111 1011 然后右移2位,无符号高位补0:

0001 1111 1111 1111 1111 1111 1111 1111 换算成10进制为536870911

2.4 位与( & )

5&13 = 5

0000 0000 0000 0000 0000 0000 0000 0101

0000 0000 0000 0000 0000 0000 0000 1101

每位与运算,转化为:

0000 0000 0000 0000 0000 0000 0000 0101

2.5 位或( | )

5|13 = 13

0000 0000 0000 0000 0000 0000 0000 0101

0000 0000 0000 0000 0000 0000 0000 1101

每位或运算,转化为:

0000 0000 0000 0000 0000 0000 0000 1101

2.6 位异或( ^ )

5^13 = 8

0000 0000 0000 0000 0000 0000 0000 0101

0000 0000 0000 0000 0000 0000 0000 1101

每位比较,相同为0,不同为1,转化为:

0000 0000 0000 0000 0000 0000 0000 1000

2.7 位非( ~ )

~5

0000 0000 0000 0000 0000 0000 0000 0101 取反

1111 1111 1111 1111 1111 1111 1111 1010

3 leetcode例题练习

题目:371 两整数之和 不适用 + - 实现加法.
用位运算模拟加法器
在这里插入图片描述
在不考虑进位的情况下,其无进位加法结果为 a ^ b。

而所有需要进位的位为a & b,进位后的进位结果为(a & b) << 1。

class Solution {
    public int getSum(int a, int b) {
        while (b != 0) {
            int carry = (a & b) << 1;
            a = a ^ b;
            b = carry;
        }
        return a;
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值