运算符
-
算术运算符:+,-,*,%
-
关系运算符:>= <= == !=
-
逻辑运算符:与&&(表示并且关系 ) 或||(表示或者的关系 只有有一个成立就是成立) 非(表示否定取反)
-
自加和自减运算符:++a,a++,–a,a–
-
三目运算符:格式:表达式?值1:值2 //相当于if语句表示表达式成立把值1赋给它,反之赋值值2
-
赋值运算符:= //将右侧的值赋值给左侧 += // a+=10 <==> a = a+10
-
移位运算符:
& 按位与运算 ,运算原则:相同二进制数位上数值为1,结果为1,否则结果为0;
| 按位或运算,运算原则:相同二进制数位上数值为0,结果为0,否则结果为1;
^ 按位异或,运算原则:参与运算的两个数相应位相同则结果为0,异号则为1;
~ 按位取反,运算原则:二进制数位上0变1,1变0;
左移操作“<<”:将运算数的二进制码整体左移指定位数,左移之后的空使用“0”来补充,移出去的二进制数忽略不计。
右移操作“>>”:将运算数的二进制码整体右移指定位数,右移之后的空使用“符号位”来补充。移出去的二进制数忽略不计。若是正数使用“0”补充;若是负数使用“1”补充;
注:在编程中建议使用短路与和短路或
进制(位运算符)
- 二进制:每一个二进制数位用0,1 ;满2进1。
- 八进制:每一个八进制数位用0,1,2,3,4,5,6,7 ;满8进1。用0开头表示。
- 十进制:每一个十进制数位用0,1,2,3,4,5,6,7 ,8,9 ;满10进1。 满10进1。
- 十六进制:每一个十六进制数位用0,1,2,3,4,5,6,7 ,8,9,A,B,C,D,E,F ;满16进1。 满16进1.。用0x开头表示
十进制转二进制:十进制转成二进制—>除以2倒取余数
二进制数转十进制数:二进制转成十进制—>按2的幂数展开并累加
补码反码和源码
- 正数:
将一个十进制正整数转换二进制数(带符号位), 即是这个数的原码.
- 负数:
先计算该负数绝对值的二进制。之后对其每个数"取反,然后加一。
比如-32
第一步:32(10)= 00100000(2)
第二步:求反:11011111
第三步:加1:11100000
- 反码:
由来: 用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如: 用十进制表示:1 + (-1) = 0,
但用二进制表示:00000001 + 10000001 = 10000010, 将结果换算成十进制数也就是-2.
于是就发现问题出现在带符号位的负数身上为了解决二进制中正负数的加减问题,人们就在原码的基础上发明了反码,
反码的表示方式是用来处理负数的,符号位置不变,其余位置相反.
反码的取值空间和原码相同且一一对应.
计算方式:
-
原码转反码: 符号位不变,其余位取反. 如: -6的原码为:10000110, 反码为11111001.
-
反码转补码: 直接补1即可. 如: -5的反码为:11111010, 补码为11111011.
-
原码转补码: 符号位不变,其余各位取反后补1, 也就是反码补1.
-
补码转原码: 退1后,除符号位各位取反.或先计算该负数绝对值的二进制。之后对其每个数“取反”,然后加一。
流程控制语句
if条件语句
|-- 顺序
从左到右,从上而下执行
|-- 选择
|-- 单分支
if (条件) {
// 条件满足,则执行{}内的代码
}
|-- 双分支
if(condition) {
// 条件满足,则执行if内的代码
} else {
// 条件不满足的情况下,执行else中的代码
}
|-- 多(三)分支
if (condition1) {
// 条件1满足,则执行这儿的代码
} else if (condition2) {
// 条件2满足,则执行这儿的代码
}....
else if (conditionN) {
// 条件N满足,则执行这儿的代码
} else {
// 剩余的所有条件
}
switch语句
switch的格式:
switch (switch表达式) {
case 值1 : 语句1; break;
case 值2 : 语句2; break; ...
case 值N : 语句N; break;
default : 默认情况下执行的语句; }
switch语句遵从下述规则:
- switch表达式必须能计算出一个char、byte、short、int或者String型值,并且必须总是要用括
号括住。 - 值1、值2、…、值N必须与switch表达式的值具有相同的数据类型,且是确切的值不能是变
量。 - 当switch表达式的值与case语句的值相匹配时,执行从该case开始的语句,直到遇到一个
break语句或到达该switch语句的结束。 - 默认是可选的,当没有一个给出的case与switch表达式匹配时,用来执行该操作。
- 关键字break是可选的。break语句会立即终止switch语句。
if和switch的区别
- if可以用于判断数值,也可以判断区间,只要运算结果是boolean类型,都可以进行判断。
- switch用于对固定的几个值,进行判断。判断的值的类型有限
注释:不要忘记在需要的时候使用break语句。一旦匹配其中一个case,就从匹配的case处开始执
行,直到遇到break语句或到达switch语句的结束。这种现象称为落空行为。
for循环语句
for循环格式:
for (初始化; 继续条件; 迭代) { 循环体语句; }
// 求0~100的和
public class TestSum {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("0~100的和:"+sum);
}
}
whlie循环语句
while语法结构:
案例:预测未来学费
public class FutureTuition {
public static void main(String[] args)
{ double tuition = 10000;
int year = 1;
while (tuition < 20000) { tuition = tuition * 1.07;
year++;
}System.out.println("Tuition will be doubled in " + year + " years"); } }
break和continue语句
- break:终止该层循环
break是终止循环,即在程序中遇到break,那么break所属的循环将结束。
for (int x=0; x<3 ;x++ ) { if(x==1) break; System.out.println("x="+x); }
- continue:跳过该层循环
continue是结束本次循环,继续下次循环。循环是不会结束的。
for (int x=0; x<10 ;x++ ) { if(x%2==0) continue; System.out.println("x="+x); }
- 在多层嵌套循环中,终止/跳过标签标记的那层循环的执行;break <标签> 或 continue <标签>
outer:for (int x=0; x<3 ;x++ ) { inner:for (int y=0; y<4 ;y++ ) { System.out.println("x="+x); break outer; } }outer:for (int x=0; x<3 ;x++ ) { inner:for (int y=0; y<4 ;y++ ) { System.out.println("x="+x); continue outer; } }