java基础之数据类型

Java基础之数据类型

其他进制to十进制

看图
其他进制转十进制

十进制转to其他进制

看图
十进制转其他进制

类型转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* java数据类型byte,short,char在运算过程中,会默认转为int类型再去计算
* Java中涉及byte、short和char类型的运
* 算操作首先会把这些值转换为int类型,然
* 后对int类型值进行运算,最后得到int类
* 型的结果。因此,如果把两个byte类型值
* 相加,最后会得到一个int类型的结果。如
* 果需要得到byte类型结果,必须将这个int
* 类型的结果显式转换为byte类型。
* 注意精度丢失问题
* 变量运算,先考虑类型
* 常量运算,先运算,再考虑运算的结果是否在数据类型范围之内
* byte的范围[-128,127]
* 1个byte占8位
* 范围:[01111111,10000000]
*/
byte b1 = 3, b2 = 4, b;
b = b1 + b2;//<变量运算>有问题,精度丢失,编译失败
b = 3 + 4;//常量运算

面试题

为什么Java byte 类型的取值范围是-128~127

概念:负数的补码是该 数 绝 对 值 的 原 码 按 位 取 反 ,然 后 对 整个数 加 1

步骤:

  • 1.确定byte是1个字节,也就是8位

  • 2.最大的应该是0111 1111,因为第一位是符号位,0表示正数

  • 3.最小的应该是1000 0000,同理,表示负数最小的(1111 1111是最大的负数-1)

  • 4.0111 1111即127

  • 5.1000 0000按照最下面的解释为先减一,得到0111 1111,然后按位取反得到1000 0000,该结果为欲求负数的绝对值,所以结果是-128(和概念反着来求出该负数)


补充知识1——原码、反码、补码

在计算机内,定点数有3种表示法:原码、反码和补码

[原码]就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

[反码]表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

[补码]表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。


补充知识2——补 码

Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。补码的规定如下:
对正数来说,最高位为0,其余各位代表数值本身(以二进制表示),如+42的补码为00101010
对负数而言,把该数绝对值的补码按位取反,然后 对整个数加1,即得该数的补码。如-42的补码为 11010110 (00101010 按位取反 11010101 +1=11010110 )

用补码来表示数,0的补码是唯一的,都为00000000。(而在原码 ,反码表示中 ,+0和-0的表示是不唯一的,可参见相应的书籍)。而且可以用 111111 表示 -1的 补码(这也是补码与原码和反码的区别)。