数据类型和运算符

数据类型

Java数据类型分为基本数据类型和引用类型。基本类型分为数值类型和boolean类型,数值类型又包含整型和浮点型;引用(指针)类型分为类、接口和数组类型、null类型。

Java数据类型转换

  1. 基本类型的自动类型转换和强制转换
  2. 表达式类型的自动提升

进制转换

  1. 二进制
    二进制位简称“位”,一个二进制位包含的信息量称为一比特。二进制的最高位为符号位,1代表负数,0代表正数,其余位表示数的绝对值。
  2. 二进制和十进制转换
    • 二进制每位对应的十进制位2的n-1次方,如111对应2的平方,2的1次方,2的0次方,从右往左依次为1-2-4-8-16-32---
    • 二进制转十进制:每位乘2的n-1次方,之后相加。如:10101的十进制为116+08+14+02+1*1=21
    • 十进制转二进制:除了除二取余逆序排序外,还有一个方法是凑数,找到比该数小而近的2的幂,对应位为1,依次做差。
      如:50最近的为32,即2的5次方,先写100000第六位为1;50-32=18,最近为16,即2的四次方,则第五位填1为110000;18-16=2,对应2的一次方,第二位填1,即110010

原码、反码、补码

  1. 原码:正数的原码为转换为二进制,并补齐位。负数的原码为按照绝对值转换为二进制后,最高为变成1。
    如:7的原码为00000000 00000000 00000000 00000111,-7的原码为10000000 00000000 00000000 00000111
  2. 反码:正数的反码和原码相同。负数的反码为原码除最高位外按位取反。
    如:7的反码为00000000 00000000 00000000 00000111,-7的反码为11111111 11111111 11111111 11111000
  3. 补码:正数的补码和原码相同。负数的补码为反码加1,即原码除最高位外按位取反加1。
    如:7的补码为00000000 00000000 00000000 00000111,-7的补码为11111111 11111111 11111111 11111001
  4. 数值在计算机中是以补码的方式存储的,原因在于,使用补码可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其位运算过程相同,不需要额外的硬件电路。
  5. 小结:正数的原码反码补码相同,都是十进制转换成二进制位。负数的原码求补码和补码求原码过程相同,都是除最高位后按位取反加1。

位运算符

为了节约内存开销和加快计算效率,可以使用位运算符。

  1. 按位与&:对应位都是1结果为1,否则为0
  2. 按位或 |:对应位都是0结果为0,否则为1
  3. 按位异或:对应位相同结果为0,否则为1
  4. 按位取反~:正数按位取反后加1,负数按位取反
  5. 有符号左移<<和右移>>:正数补0,负数补1。高位溢出直接舍弃
  6. 无符号左移<<<和右移>>>:无论正负,高位补0
  7. 左移巧用
    • 左移n位相当于该数乘以2的n次方,但是此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。x*=2优化为x=x<<1
    • 计算a的第b个二进制位是什么,a&(1<<b)
原文地址:https://www.cnblogs.com/pycrab/p/8732389.html