dede 网站地图 模块武汉seo服务多少钱
1. 原码:十进制数据的二进制表现形式,最左边是符号位,0为正,1为负。
- 原码的弊端:利用原码进行计算的时候,如果是正数则完全没有问题。但是如果是负数,结果就会出错。实际的运算方向,跟正确的运算方向是相反的。
2. 反码:正数的反码是其本身,负数的反码是,其原码的符号位保持不变,其余位取反。
- 反码出现的目的:是为了解决原码不能计算负数而出现的。
- 反码的弊端:负数运算的时候,如果结果不跨0,是没有任何问题的。但如果结果跨0,跟实际结果就会有1的偏差,因为0算了两遍
3. 补码:正数的补码是其本身,负数的补码是,其反码+1。
- 补码出现的目的:为了解决反码计算负数时,跨0的问题而出现的。
- 补码还能多记录一个特殊的值,在一个字节(8个bit位)的情况下,是-128。该数据在一个字节下,没有原码和反码。因为-0的原码是1000 0000,-127的反码是1000 0000。(-0和-127把-128的位置给占了)
- 计算机中的存储和计算都是以补码的形式进行的。
常见的原码,反码,补码汇总图:
4. 隐式转换
public class Test{public static void main (String【】 args){byte a = 10;//0000 1010int b = a;//0000 0000 0000 0000 0000 0000 0000 1010System.out.println(b);}
}
- 核心:前面补0
- byte:1个字节,short:2个字节,int:4个字节,long:8个字节
5. 强制转换
public class Test{public static void main (String【】 args){int a = 300;//0000 0000 0000 0000 0000 0001 0010 1100byte b = (byte)a;//0010 1100System.out.println(b);//44}
}
public class Test{public static void main (String【】 args){int a = 200;//0000 0000 0000 0000 0000 0000 1100 1000byte b = (byte)a;//1100 1000System.out.println(b);//-56}
}
- 核心:去掉前面不要的
- java在运行的时候,默认会把最终的结果以十进制输出
6. 其他的运算符
a. & 逻辑与
- 只有两个都是true(即都是1),结果才是true(1)
b. | 逻辑或
- 只有两个都是false(即都是0),结果才是flase(0)
- 在计算数字时,没有短路逻辑运算符(即没有&&和||)
c. << 左移
- 小公式:左移一次,就*2
- 低位补0,指右边的所有空位都补0
d. >> 右移
- 小公式:右移一次,就/2
- 高位补0或1,指左边的数值位永远补0,但符号位,如果之前是正数就补0,如果是负数就补1
e. >>> 无符号右移
- 跟右移类似,只不过,高位补0不看之前是正数还是负数,数值位和符号位都补0。