进制、精度,Java的类型转换

进制的表示:

  • 0b010 :  二进制表示形式:前面+0n
  • 0100  : 八进制表示形式: 前面+0
  • 0x001 : 16进制表示形式:前面+0x

计算机以补码的方式进行运算

进制的转换:

10进制转换成任意进制: 除基倒取余,结果从按余数下往上写


原反补:

  • 原码:二进制定点表示法,最高位为符号位,0为正,1为负,其余为数值大小
  • 反码:正数的反码与原码相同,负数的反码对其除符号位之外的原码逐位取反。
  • 补码:正数的补码与其原码相同,负数的补码在其反码的末位+1.

7:  

  • 原码:0 0000111
  • 反码: 0 0000111
  • 补码: 0 0000111

-7:1 0000111

  • 原码:1 0000111
  • 反码:1 1111000
  • 补码:1 1111001

已知原码求补码: 先求反码。 反码末位+1就是补码

数据类型:

Java是强类型语言,对于每一种数据都定义了明确的具体数据类型,
在内存中分配了不同大小的内存空间


整型:

  • byte :  1个字节  1个字节8位(二进制位)  放0和1  2的8次方=256种  -128~127  
  • short:  2个字节  1个字节8位 2的16次方     2的-15次方~2的15-1    0~65535
  • int     4个字节  2的32次方    -2的31~2的31次方-1
  • long:   8个字节   2的 64次方   -2的63次方~2的63次方-1

浮点型:单精度,双精度  小数默认双精度

  • float:  4个字节  小数默认double  flaot f = 1.1f;
  • double:  八个字节   2的64位

字符型:

  • char: 两个字节  0~65535

布尔型:

  • 理论占1/8个字节,一个开关就可以决定正负,但java没有明确指定他的大小

混合运算:

  •     进行混合运算的时候,byte、char、short不会相互转换,而是会升为int类型。
  •     byte,short,char--->int---->long---->float---->double
  •     float能存储long的值,float表示的数据范围比long的范围要大
  •    int a  = b++;  ++在赋值后面,先取值再自增.
  •    int c  =++d , 则先自增再取值
  •   short s = 1 ;  s = s+1 ;  error: 丢失精度。=是赋值运算符号,short与int进行运算,会提升为int,int赋给short,丢失精度。
  •   short s = 1 ; s+=1 ;  +=是操作符,等价于s=(Short)(s+1),会进行强转,不会报错。

关于中文:

  •    Java一Unicode编码,每个字符占两个字节 ,中文也占两个字节。所以每个char可以保存一个汉字。

Ex:

  • byte1个字节,int4个字节
  • 当byte和int运算,赋给ints时,byte自动转化为int(byte前补上3个位00000000 00000000 00000000)
  • 当他们的运算赋给byte时,会报错,损失精度(int 4变1),所以要强制转换
  • byte = byte(int + byte);

 

 

posted @ 2018-12-08 16:30  IslandZzzz  阅读(675)  评论(0编辑  收藏  举报