进制、数据类型、运算符
内存划分最小单位:字节
1个字节=8个bit位
1个字母1个字节,1个汉字2个字节
进制
1、进制的划分
二进制(权重2)、八进制(权重8)、十进制(权重10)、十六进制(权重16)
注意:除了这些还有三进制、四进制 只是这些不经常用
2、进制的转换
1)二进制–>八进制
八进制:0471 以零开头
取值:0~7
2)二进制–>十六进制
十六进制:0x139 取值0~9 a ~f/A ~F
以零x开头
3)十六进制–>十进制
0x139 = 9*(16^0)+3*(16 ^1)+1*(16 ^2) = 313
4)十进制–>二进制
1)辗转相除法
2)拆分法
100
64(2 ^6)+32(2 ^5)+4(2 ^2)=0110 0100
5)十进制–>二进制
符号位:正数=0 负数=1
符号位不参与运算
1)当为正数时
10
原码:0000 1010
反码:0111 0101
补码:000 1010
原码==补码
2)当为负数时
-10
原码:1000 1010
反码:1111 0101
补码:1111 0110
负数补码:原码按位取反+1
注意:计算机、卷子上写的是补码
6) 二进制–>十进制
补码:1010 1010
1、记录符号位 负数
2、按位取反+1 --> 值 0101 0110 = 86
最后二合一:-86
数据类型
1、数据类型所占的字节数
整型:byte(1)、short(2)、int(4)、long(8)
浮点型:float(4)、double(8) 高精度一般都用
字符型:char(2)、unicod(2)字符集(包含ASCII码,‘a’=97)
2、引用类型分为四种
强引用(StrongReference)
软引用(SoftReference)
弱引用(WeakReference)
虚引用(PhantomReference)
3、变量的定义(租户):
1)int num=0;
2)int num; num=10;
4、常量的定义(钉子户(不能改变)):
final int PI=3;
5、类型转换
1)强制转换(显式)
大盒—>小盒子
错误:short s= 10;
byte b= s;
正确:byte b=(byte)s
2)自动类型转换(隐式)
这些类型按精度从低到高排列顺序为byte<short<int<long<float<double
小盒—>大盒
byte b=10; short s=b;
注意:系统默认小数位double
错误:float f=1.0;
正确:float f=(float)1.0; float f=1.0f/1.0F
其中:int/int–>int
int/double–>double
byte/int–>int
笔试题
1、byte a=120,byte b=10;求a+1/2b的值?
1/2=0(这个为int的类型)所以a+1/2b=120;
2、byte a=120,byte b=10,1/2(a+b)的值赋给byte c?
这个1/2 =0为int类型,所以1/2(a+b)为int类型,而c是byte类型,所以这句话是错误的。
应改为:byte c = (byte)(1/2(a+b));
运算符
运算符是一些特殊符号,主要用于数学函数、一些类型的赋值语句和逻辑比较方面。
1、java中运算符主要分为:
2、赋值运算符
1)赋值运算符以符号“=”表示,它是一个二元运算(对两个操作数作处理)
2)赋值运算符“=”处理时会先取得右方表达式处理后的结果,因此一个表达式中若含有两个以上的“=”运算符,会从最右方的“=”开始处理
3、自增、 自减运算符++、 –
其功能是使变量的值增 1 或减 1。
1)++a(–a)
表示在使用变量a之前,先使a的值增加(减)1
2)a++(a–)
表示在使用变量a之后,使a的值加(减)1
4、逻辑运算符
Java 提供了 3 种逻辑运算符, &&(与)、 ||(或)、 !(非)。
1)a&&b: 只有 a 与 b 都为 true, 结果才为 true, 否则为 false。
2)a||b: 只有 a 与 b 都为 false, 结果才为 false, 否则为 true。
3)!a: 与 a 的值相反。
注意:“&&”属于“短路”运算符,而“&”则属于“非短路”运算符。
5、位运算符
位运算符的作用在于对整数数值的二进制表示进行运算。
- 按位求反运算符 ~
对操作数的二进制数据的每一个二进制位都取反。
即 1 变成 0, 而 0 变成 1。 如`8(… 0000 1000)的结果为-9(1111…1111 0111 负数的计算按位取反+1)。 - 位与运算符 &
参与运算的两个操作数, 相应的二进制数位进行位与运算。
如 5&11(0101&1011) 结果为 1。 - 位或运算符 |
参与运算的两个操作数, 相应的二进制数位进行位或运算, 两个位上一个有 1 则为 1。
如 5|11(0101&1011)结果为 15。 - 位异或运算符^
参与运算的两个操作数, 相应的二进制数位进行位异或运算, 两个位一样则为 0, 否则为 1。
如 5^11(0101&1011 结果为 14。 - 保留符号位的右移运算符>>
将一个操作数的各个二进制位全部向右移若干位, 这个位数由右操作数来决定, 移到右端的低位被舍弃,
左边空出的位全部用最高位的符号位来填充。 如 5>>1 结果为 2。 -9>>1, 结果为-5。 - 右移运算符>>> 和>>
1) >>>右移后左边空出的位用 0 填充(无论最高位是0还是1)。
如 5>>>1 结果为 2。 -9>>>1, 结果为 2147483643。
2) >>如果最高位是0,右移空的位就填入0;如果最高位是1,右移空的位就填入1。 - 左移运算符<<
将一个操作数的所有二进制位向左移若干位, 右边空出的位填 0。 若高位左移后溢出, 则舍弃溢出的数。
如 5<<1 结果为 10
注意:>>n 就是除n个2 <<n 就是乘n个2
6、三元运算符
格式:
条件式?值1:值2
若条件式为true则取值1,反之值2