6月17日学习,运算符,标识符,键盘输入,进制,原码,反码,补码
目录
运算符简单描述
-
算数运算符 ++ ,--,+,-,*,/,% ,浮点数运算结果是一个近似值
a % b 当 a 是小数时,计算公式:a - (int)a / b *b
10.5 % 3 = 10.5 - 10 / 3 * 3 = 1.5
-
赋值运算符 = , += , -= ,*= ,/+ , %=
-
关系运算符 ==, != , < , > ,<= ,>= 结果返回Boolean
-
逻辑运算符 &(不断路), &&(短路与) , | (不断路) , ||(短路或), !, ^ (true^false = true,true ^ true = false),结果返回Boolean
-
位运算符
-
三元运算符 条件表达式:表达式1?表达式2; 表达式1,表达式2 要为可以赋值给变量的类型。
4.3进制
-
二进制 0b开头 ,int n1 = 0b1010; //10
-
十进制
-
八进制 0开头
-
十六进制 0X开头
4.4进制转换(基本功)
第一组,其它进制转十进制
二进制转十进制:规则从最低位(右边)开始,将每个位上的数提出来,乘于2的位数-1次方,然后求和。
八进制转十进制:规则从最低位(右边)开始,将每个位上的数提出来,乘于8的位数-1次方,然后求和。
十六进制转十进制:规则从最低位(右边)开始,将每个位上的数提出来,乘于16的位数-1次方,然后求和。
第二组,十进制转其它进制
十进制转二进制:将十进制数不断除于2,直到商为0为止,然后将每步得到的余数倒过来就是2进制。
十进制转八进制:将十进制数不断除于8,直到商为0为止,然后将每步得到的余数倒过来就是8进制。
十进制转十六进制:将十进制数不断除于16,直到商为0为止,然后将每步得到的余数倒过来就是16进制。
第三组,二进制转八、十六进制
二进制转八进制:从低位开始,将二进制每3位一组,转成对应的八进制即可
0b11010101 转八 101—>5 ,010 —> 2 , 11—> 3 , 所以八进制为:0325
二进制转十六进制:从低位开始,将二进制每4位一组,转成对应的八进制即可
0b 11010101 转十六 0101—>5, 1101—> D, 所以十六进制为:D5
第四组,八、十六进制转二进制
八进制转二进制:将每1位八进制转换成3位二进制数即可。
0237 转二进制 2—>010, —>011,7—>111,所以二进制为:0b10011111
八进制转二进制:将每1位八进制转换成4位二进制数即可。
0x23B 转二进制 2—>0010,3—>0011, B—>1011, 所以二进制为:0b001000111011
4.5原码、反码、补码(重难点)
原码:原码是一个十进制数按照数据类型得到,比如int a = 2; int是4字节,
那么原码是 00000000 00000000 00000000 00000010, 2是正数,反码,补码也是这个
原码的作用:推出补码。
补码的作用:在计算机运算的时候,都是以补码的方式来运算的
位运算:java中有7个位运算(& , | , ^ , ~ , >> , << 和 >>>)
分别是按位与&、按位或|、按位异或^、按位取反~、他们的运算规律:
-
按位与& : 两者全为1,结果为1,否则为0。
-
按位或| : 两者有一个为1,结果为1,否则为0
-
按位异或^ : 两者一个为0,一个为1,结果为1,否则为0
-
按位取反~: 0 变 1 , 1 变 0
-
算数右移 >>:低位溢出,符号位不变,并用符号位补移出的高位
-
算数左移 <<: 符号位不变,低位补0
-
>>>
逻辑右移也叫无符号右移,运算规则是:低位溢出,高位补0
例子1: 2 & 3 = ?
按位与&运算,1)按数据类型转换成原码,int类型的2 为4字节
int 型 2 的原码 00000000 00000000 00000000 00000010,补码 00000000 00000000 00000000 00000010
int 型 3 的原码 00000000 00000000 00000000 00000011,补码 00000000 00000000 00000000 00000011
2)位运算是根据补码运算,2,3补码对比,两者全为1,结果为1,否则为0。运算后 00000000 00000000 00000000 00000010
3)结果要将按位与的补码转成原码,那就是 00000000 00000000 00000000 00000010, 转成十进制为2
结果:2 & 3 = 2
例子2: ~ - 2 = ?
1)- 2 的原码 : 10000000 00000000 00000000 00000010 ,
2)位运算要根据求出补码,求出负数的补码前要先求出反码
- 2 反码: 11111111 11111111 11111111 11111101 ,3)负数的反码=它的原码符号位不变,其它位取反(0变1,1变0)
- 2 补码: 11111111 11111111 11111111 11111110 , 4)负数的补码=它的反码+1
3) ~ - 2 根据将补码,0 变 1 , 1 变 0 的取反操作 得
00000000 00000000 00000000 00000001,这是个补码,但这是个正数,符号为0
变原码 也是 00000000 00000000 00000000 00000001 , 变十进制就是 1 .
结果:~ - 2 = 1
例子3: ~ 2 = ?
1)2的补码 : 00000000 00000000 00000000 00000010
2)位运算~,取反操作: 11111111 11111111 11111111 11111101
3) 符号位是1,为负数,变回原码先变反码
位运算后的补码变反码 , 负数的反码=负数的补码-1
11111111 11111111 11111111 11111100
负数的反码变原码 , 原码符号位不变,其它位取反
10000000 00000000 00000000 00000011 , 也就是 -3
结果:~ 2 = -3
例子4: 1 >> 2 = ?
int型1 右移两位
简单版 1 / 2 /2 =0 即可,处于2次2,(推荐)
变成补码版 1 的补码 00000000 00000000 00000000 00000001,
右移两位,符号位补上两位那就是 00000000 00000000 00000000 00000000.
变成十进制 就是 0
例子5:1 << 2 = ?
int 型的1 左移 2 位
简单版: 1* 2 * 2 = 4
右移2位,乘于 2 个 2,3位乘于 3 个 2
补码版:1 的补码 00000000 00000000 00000000 00000001,
左移两位,低位补0,那就是 00000000 00000000 00000000 00000100
转成十进制 就是 4
背下下面几条原码,反码,补码知识点(必背)
1)二进制的最高位是符号位:0表示正数,1表示负数
2)正数的原码,反码,补码都一样
3)负数的反码=它的原码符号位不变,其它位取反(0变1,1变0)
4)负数的补码=它的反码+1,负数的反码=负数的补码-1
5)0的反码,补码都是0
6)java没有无符号数,换言之,java中的数都是有符号的
7)在计算机运算的时候,都是以补码的方式来运算的 (补码把正数和负数统一起来了)
8)在我们看运算结果的时候,要看他的原码 (重点)