short s=3;
s=s+2;
s+=2
有什么区别?
s=s+2编译错误,s+2转换为int类型 再赋给short会丢失精度,所以不能赋值给short类型的s
s+=2直接将2以short类型计算和;
在项目中我不常用以下逻辑运算符,小记一下
^为异或:true^true=false ;false^false=false;false^true=true;
&和&&的区别
&无论左边是true还是false,右边都运算
&&如果左边是false,右边不用运算
|:两边都参与运算
||:左边为true右边不运算;
位运算符:(二进制运算)
3<<2=12;
3的二进制向左移动两位后面补0:3*2*2往左移移动几就是几的几次幂
6>>2=1
6的二进制向右移,超出两位舍弃,前面多出两位补0;6/4 舍弃小数部分取整为1
<<:乘以2的移动位数次幂
<<:除以2的移动位数次幂取整
>>最高位补什么由原有数据的最高位值决定 如果最高位为0,右移后,用0补空位 如果最高位为1,右移后,用1补齐
>>>:无论最高位是什么,右移后,都补0
&运算(转换成二进制运算)
6&3=2
6的二进制:
3的二进制: &011 0为false 1为true
----------------------------------------------------------
道理相同:6|5=7 ;6^5=3
~波浪线为取反码:~6+1=-6;
6^7^7=6(异或两次同一个数最后得自己)
第一次异或相当于加密,然后再异或一次就可恢复(加密算法相当复杂|、^、等各种复杂加密)
2*8怎样运算效率最高?
2*8可以把两位转换成二进制然后和乘法一样得到的二进制数据再转换成十进制=16
位运算 2*8相当于2乘以2的3次幂,2<<3 2的二进制数据向左边移动三位就可得出二进制转换成十进制=16(位运算效率最高)
小技巧:将60转换成16进制数 先将16转换成2进制 取最后四位 通过&15 的结果 再(>>>)右移4位
switch case
switch(x)
{
default:
System.out.println("AA");
//break;
case :3
System.out.println("AA");
break;
case :4
System.out.println("abc");
break;
}
x=1;
default写在前面,首先case3、case4 再执行default(没有break)但没遇到break和结尾{号 ,然后继续执行default后面的所有代码,不再考虑case直到遇到break;
Double 取两位小数
Double a = 2.1234567;
Math.Round(a,2);
Double保留小数点位数(带四舍五入)
程序代码
Double salary1 = 10000.0;
Double salary2 = 10000.12345;
Double salary3 = 10000.1289;
Int salary4 = 10000;
string salary5 = "10000";
string salary6 = "10000.12345";
string salary7 = "10000.1289"
Convert.ToDouble(salary1).ToString("0.00");//保留小数点后两位,结果为10000.00
Convert.ToDouble(salary2).ToString("0.00");//保留小数点后两位,结果为10000.12
Convert.ToDouble(salary3).ToString("0.00");//保留小数点后两位,结果为10000.13
Convert.ToDouble(salary4).ToString("0.00");//保留小数点后两位,结果为10000.00
Convert.ToDouble(salary5).ToString("0.00");//保留小数点后两位,结果为10000.00
Convert.ToDouble(salary6).ToString("0.00");//保留小数点后两位,结果为10000.12
Convert.ToDouble(salary7).ToString("0.00");//保留小数点后两位,结果为10000.13
w:for(int x=0;x<3;i++)
{
for(int y=0;y<3;y++)
{
}
}
给for循环起名字,break直接跳出w