JavaSE — 数据类型和运算符

一、数据类型
二、整型
1、原码、反码、补码
> 整型 5 和 -5 用二进制原码、反码、补码表示,其实默认为`int`,占4个字节,32位
>
> 注意:`补码`才是计算机底层保存整数的的类型
  • 原码:

    5 : 0000 0101

    -5: 1000 0101

  • 反码:

    5 :0000 0101(正数原码、反码和补码一样)

    -5:1111 1010(原码取反,最高位的符号位不变)

  • 补码

    5 :0000 0101

    -5:1111 1011(反码加1)

2、为什么计算机用补码计算
  • 最大的好处就是可以将加法和减法统一进行计算
  • 例如正整数 5 加上它的相反数结果为 0,5二进制表示为 0000 0101,需要找一个和它相加为 0 的二进制数,即 1111 1111 + 1 = 0(位数溢出,结果为 0000 0000),也就是说 1111 1011就是我们需要的,而这个数就是 -5 的反码+1,这也是为什么负数的补码需要反码加1
三、字符型

java 使用 Unicode 字符集作为编码方式

  • 计算机底层保存字符时,实际是保存该字符对应的编号,因此, char类型的值也可以直接作为整型值来使用,相当于一个16位的无符号整数,范围 0~65535
  • 如果把0~65535范围内的一个 int 值赋给 char 类型,系统会自动当成 char 类型处理
四、浮点型
1、浮点数计算精度丢失问题
  • 原因:二进制不能完全准确的表示浮点数
2、二进制为什么不能准确的表示浮点数
  • 二进制表示小数点后面位数时,只有 2 的多少次方

    2的次方十进制
    2^(-1)0.5
    2^(-2)0.25
    2^(-3)0.125
    2^(-4)0.625

    不难看出,2的某次方之和可以精确表示,其他数则不行

3、代码中怎么解决精度丢失问题
  • 使用 BigDecimal 进行运算
  • 注意:应先将参数转为String,不然会默认 double 类型,在进行转换 double类型时,会造成精度丢失
五、基本类型的类型转换
1、自动类型转换
  • 将某种基本类型的值赋给更大的类型时,会自动转换成大的类型,大小如下

2、强制类型转换
  • 上图右边类型向左转换时,必须进行强转,例如下图所示

六、运算符

注意:当 /%运算,有一个或者两个操作数为浮点数时,第二个操作数可以为0,系统当作小数处理,/结果为无穷大或负无穷大,%结果为非数 NaN

  • /取整,如 13 / 3 = 4
  • %取余,如 13 % 3 = 1
1、位运算符
  • &:按位与,两位同时为1,返回1
  • |:按位或,只要有一位是1,返回1
  • ~:按位非,全部取反,包括符号位
  • ^:按位异或,两位相同返回0,不同返回1
  • <<:左移运算符
  • >>:右移运算符
  • >>>:无符号右移运算符
2、左移运算符和右移运算符
  • <<左移运算符,左移后右边空出的位以0补充,左边超出部分截取掉
  • >>右移运算符,左边空出位数按原来符号补充,即正数补0,负数补1
  • >>>无符号右移运算,左边补0
3、移位运算注意
  • 低于int的类型(byteshortchar)的操作数,会先自动转转换成int类型再移位
  • 对于int类型的整数移位 a >> b,当 b>32时,系统会先用 b 对32求余,得到的余数才是真正的移位,因为int只有32位,也就是说 a >> 34 和 a >> 2 结果一样
  • 对于long类型的整数移位 c >> d,和int一样,只不过是先将 d 对 64取余
4、逻辑运算符
  • &&:短路与,前后两个操作数都为 true,则返回 true
  • &:与,和短路与一样,只是不会短路
  • ||:短路或,前后两个操作数一个为 true,则返回 true
  • |:或,和短路或一样,只是不会短路
  • !:非,去取反,如 true,取 false
  • ^:异或,两个操作数不同才返回 true,否则返回 false
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值