public class Helloworld {
public static void main( String[] args ){
/* 1. 算术运算符 + - * / %
*
* (1) + (正数,加法,连接符)
* 连接符的作用: 让任何的数据都可以与 字符串进行拼接;
* 如果+号用于字符串的时候,那么+号就是一个连接符, 并不是做加法功能;
*
* 连接符注意: 任何类型的数据与字符串使用连接符连接,那么结果都是字符串类型的数据;
*
* int i1 = 1;
int i2 = 2;
System.out.println(i1 + "world");
System.out.println(1+2+3 + "world"+1+2+3); //6world123
*
* (2) - * / %
* (1) java中的 int/int, 结果表达式会是 int类型, 如 11/3=3
* int a = 11;
int b = 3;
System.out.println(a/b);
* (2) java中的 % ,取模运算, 结果的正负号是取决于被除数。
* 10 = -3 * -3+1;
* -10 = -3* 3 -1;
* -10 = 3 * -3 -1;
* */
/*
* 2. 自增,自减 ++ --
* (1) 关于后自增,自减的运行原理:
* (1) ++,--的运算优先级别很高,无论前++————还是后++--,都会先自增自减;
* (2) 而后++--则是通过增加一个临时变量实现其效果的;临时变量保存后++--的值,然后变量++--,再将临时变量赋值;
*
* int i = 0;
i = i++;
System.out.println(i);
*
* (2) 前++,-- 变量先++--,然后返回变量本身
* 后++ -- 先创建临时变量保存原变量的值, 然后变量++--, 然后返回临时变量的value
* */
/* 3. 赋值运算符: =,+=,-=,*=,/=,%= (这些运算符进行运算时,编译器已经对 表达式的value进行了强制类型转换,所以编译不会报错)
*
* byte b1 = 1;
byte b2 = 2;
b2 += 1;
b2 += b1;
// b2 = b2 + b1; 由于b1+b2表达式值类型是int,而int->byte不能隐式转换,编译报错
System.out.println(b2);
* */
/* 4. 比较运算符: 比较运算符的结果都是返回一个布尔值的;
* (1) == 判断是否等于
* == 用于比较两个基本数据类型数据的时候,比较的是两个变量存储的值是否一致;
* == 用于比较两个引用类型变量的数据时候,比较的是两个引用类型变量所记录的内存地址是否一样
*
* (2) != 不等于 >, >= 大于,大于等于 <,<=
* */
/* 逻辑运算符: 逻辑运算符的作用 在于连接 boolean表达式的;
* (1) &&双与 ||双或 !非
* 1. 需要左右都是boolean表达式
* 2. &&,||具有短路原则
*
* (2) & | ^
* 1. 在java中,&|^在两边都是boolean表达式时,可以算是逻辑运算符号, 证实原因是 按位运算,但是boolean的值只有 1bit有值;
* 2. 充当逻辑运算符号的时候,不具有短路原则;
*
* 1. 逻辑与: &&,& --> 要全部为真才是真
* 2. 逻辑或: ||,| --> 只要有一个为真就为真
* 3. 异或: ^ ---> 异则为真,同则为假
*
*
*
* 位运算: 位运算就是直接操作二进制的; (直接操作bit)
* &(与), |(或), ^(异或), ~(取反)
*
* 关于^异或: 如果操作数A连续异或同一个操作数两次,那么结果还是操作数A。
* 应用: 异或可以对数据进行加密。
*
* int a = 3;
* int b = 4;
* a = a^b;
* b = a^b;
* a = a^b;
*
*
* 截取一个二进制数字的指定位数,要求截取该二进制数据的低4位: &
* 0000001111110001
* & 0000000000001111
* -> 0001
*
*
* 移位运算符:
* << 左移运算符 3<<2 相当于011 --->110 3*(2的1次方)
* >> 右移运算符 3>>2 相当于011 --->001 3/2=1
* >>> 无符号右移
* 无符号右移 与 右移的区别: 移动是否改变数据的最高位,即符号位;
*
* */
}
}