您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
【第3章:Java基础程序设计】_运算符、表达式与语句
发布时间:2020-11-16 17:27:48编辑:雪饮阅读()
按位与、按位或
位与(&)运算、位或(|) 运算
public class Hello{
public static void main(String args[]){
int x=3;
int y=6;
System.out.println(x&y);
System.out.println(x|y);
}
}

运算原理
位与(&)运算:两个二进制值都为1,结果才为1,否则为0
十进制3的2进制是11,在java的int(整型) 32位2进制位则值为:
00000000 00000000 00000000 00000011
十进制6的2进制是110,在java的int(整型) 32位2进制位则值为:
00000000 00000000 00000000 00000110
则x与y按位与的32位2进制位值为:
00000000 00000000 00000000 00000010
然后再转换为10进制则是2
位或(|) 运算:只要有一个为1,结果就为1
3:00000000 00000000 00000000 00000011
6:00000000 00000000 00000000 00000110
或:00000000 00000000 00000000 00000111
或后的10进制:7
取反(按位)
按位取反用约等于~符号
将一个整数转换成二进制表示叫做原码。
正数的反码:与原码相同
负数的反码:原码的符号位不变,其他位取反。
取反不同于反码;
public class Hello{
public static void main(String args[]){
int x=-3;
System.out.println(~x);
}
}

运算原理:
二进制的最高位是符号位(“0”代表正数,“1”代表负数),则-3的原码是:
-3:10000000 00000000 00000000 00000011
负数的反码 = 原码的符号位不变,其他位取反;
反码: 11111111 11111111 11111111 11111100
负数的补码 = 反码+1(非按位仅末尾);
补码: 11111111 11111111 11111111 11111101
按位取反
取反: 00000000 00000000 00000000 00000010
转换10进制就是2
按位左移
<<表示左移,不分正负数,低位补0;
public class Hello{
public static void main(String args[]){
int x=3;
System.out.println(x<<2);
}
}

运算原理
3原码: 00000000 00000000 00000000 00000011
<<表示左移,不分正负数,低位补0;
3左移2位: 00000000 00000000 00000000 00001100
转换为10进制为12
按位右移
>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;
public class Hello{
public static void main(String args[]){
int x=3;
System.out.println(x>>2);
}
}

3原码: 00000000 00000000 00000000 00000011
>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;
3右移2位: 00000000 00000000 00000000 00000000
转换为10进制为0
无符号按位右移
>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0
public class Hello{
public static void main(String args[]){
int x=3;
int y=-3;
System.out.println(x>>>2);
System.out.println(y>>>2);
}
}

运算原理
3原码: 00000000 00000000 00000000 00000011
>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0
3右移2位: 00000000 00000000 00000000 00000000
转换为10进制为0
-3原码: 10000000 00000000 00000000 00000011
-3右移2位:00100000 00000000 00000000 00000000
转换为10进制为1073741823
自动类型转换
两个不同数据类型操作数的计算结果自动按数据类型范围大的一方进行计算
public class Hello{
public static void main(String args[]){
char ch='a';
short a=-2;
int b=3;
float f=5.3f;
double d=6.20;
System.out.println((ch/a)-(d/f)-(a+b));
}
}

运算原理
(1)a的ascill码表中10进制值为97
char小于short
ch/a的结果类型是short,结果值-48.5,然short是整型则结果为-48
(2)d/f中f属于float单精度,d属于double双精度,结果按double计算:
1.1698112786558879
(3)a+b中b属于int,范围大于a的short结果按int计算:1
(4)short(48)-double(1.1698112786558879
)-int(1)
Short到double,double范围大按double计算,double到int还是double大,仍然按double计算:-50.169811278655885
关键字词:java