一、进制转换
10^n被称为权 10称为基数
计算机中正数和负数的关系是取反加一, 如: ~3+1=-3
补码边界运算有溢出风险
32位二进制补码最多表示2^32个数, -2G~2G
1,计算机中的一个二进制数, 00001111,它的10进制为:
0000 1111 = 15 正数直接转换
2, 1111 1001,10进制数是多少
1111 1001
0000 0110 按位取反
0000 0111 末尾加1
7
-7
1111 1001 = -7;
上面两个例子是从计算机中2进制转10进制,
下面是从10进制转计算机中2进制
1,正数取源码直接转
2,负数按位取反末尾加1
十六进制是2进制的简写,方便专业人员书写2进制数据
-----------------------------------------------------------
package pack01;
public class HexBie {
public static void main(String[] args){
int i = 192;
System.out.println(Integer.toBinaryString(i));
System.out.println(Integer.toHexString(i));
i = 0xf4;
System.out.println(i);
System.out.println(Integer.toHexString(i));
System.out.println(Integer.toBinaryString(i));
i = 072;
System.out.println(i);
}
}
---------------
11000000
c0
244
f4
11110100
58
-----------------------------------------------------------
java中,int类型能表示的数据范围最大为2G-1,最小为-2G.
i = 0x7fffffff; //整数的最大值
i = 0x80000000; //整数的最小值
二、数据类型
1,基本数据类型(8个)
byte(1) short(2) char(2) int(4) long(8) float(4) double(8) boolean
整型: byte, short, int, long
浮点型: float, double
字符型: char
Boolean型: boolean
2,float: 1位为符号位(0,1),指数8位,尾数23位(精确度是23位)
所以说int的精确度比float要大,但是int表示的范围小。
float类型因为精度过低,所以一般很少使用,一般会使用double
3,double:1位符号位,11位指数,52位尾数。
------------------------------------------------------
package pack01;
public class HexBie {
public static void main(String[] args){
int a = 0x7fffffff;
int b = 0x7ffffff0;
float fa = a; //精度不够
float fb = b;
System.out.println(a);
System.out.println(b);
System.out.println(fa);
System.out.println(fb);
System.out.println(fa == a);
System.out.println(fb == b);
System.out.println(a == b);
System.out.println(fa == fb);
}
}
------------------
2147483647
2147483632
2.14748365E9
2.14748365E9
true
true
false
true
------------------------------------------------------
4,字符型char**
字符类型是一个16位无符号整数,是一个2进制数,是一个unicode编码值。
java char的范围0~65535不能表示全部unicode,但是可以表示unicode最
常用部分,足够用了。
1,什么是编码?
用二进制数表示10进制数或字母
unicode编码中英文部分与ASCII码兼容。
------------------------------------------------------
package pack01;
public class HexBie {
public static void main(String[] args){
char c;
c = 97;
System.out.println(c);
System.out.println((int)c);
}
}
--------------
a
97
------------------------------------------------------
package pack01;
public class HexBie {
public static void main(String[] args){
char c1,c2,c3;
c1 = 97;
c2 = '
';
c3 = 98;
System.out.print(c1);
System.out.print(c2);
System.out.print(c3);
}
}
------------
a
b
------------------------------------------------------
//并不是所有字符都可见,比如"u0000"一般作为c++字符串结束字符
package pack01;
public class HexBie {
public static void main(String[] args){
char c;
c = 'u0000';
System.out.println(c);
}
}
------------------------------------------------------
各类数值型数据间的混合运算
double <--- float
^
|
long
^
|
unsigned
^
|
int <--- char,short,byte
横向表示必定转换,纵向表示当运算对象为不同类型是转换方向