Java学习------第一周周报

第一周学习

个人的想法

关于数据类型转换的二次学习;

数据类型的转换只针对于变量,对常量并不适用;

常量的转换会根据数据类型的范围进行判断,若超过变量的数据类型的范围,才会报错;

例如下题:

byte a=1,b=2,c;
c=a+b;
c=1+2;
//问那一句编译错误

在此问题中,个人的错误做法,自然而然的选择了第三句;

对数据转换的对象并未搞清楚,这是一个小细节;

该题正确答案为第二句,

在表达式中的运算,变量之间的运算符操作结果,若没有明确类型,则默认向默认型转换,

此处两个byte类型自动转为int型,进行相加,故加法结果后为int类型,

与左式数据类型不符,需要加入强转符,应改为c=(byte)(a+b);

而针对常量的运算符操作,仅需考虑其类型范围,常量会自动转换类型;

关于a^b=a+b的巧合性

在关于如何用异或符号进行两个数的交换中,误以为a^b=a+b;

如下题

int a=10,b=5;
a=a^b;
b=a^b;
a=a^b;

在此题中,并未有任何问题,完成两数的交换,

而在计算ab时发现结果为15;因此产生了一个想法,是否为ab=a+b?

举例不难发现:87=15;2040=60;

然而我们可以通过举例计算,11^12!=23 20^21!=41

至于原理,目前尚未得知,只能警示自己,勿动此小聪明,目前毫无规律,要按照规则计算!

一些规律的总结

非运算:~

快速取值规律:以-1为中心,取相反的数

byte a3 = 11;// 0000 1011
// ~a3:1111 0100
// 符号位为1,取反加1操作:0000 1011+0000 0001=0000 1100=12;
// ∴ ~a3=-12;

异或运算^

a^0 =a;a^a=0;

// 例题:
// a=5,b=10,如何通过异或操作交换两数?
a = 5; // 0000 0101
b = 10;// 0000 1010
a = a ^ b;// ①
b = a ^ b;// ② 将①式代入:b=(a^b)^b=a^(b^b)=a^0=a;
a = a ^ b;// ③ 将②式代入: a=a^(a^b)=(a^a)^b=0^b=b;

整数的左移位>>

向左移动n位,则除以n个2;最终为0;

byte leftshirf = 10;//0000 0100
byte newleftshirf=(byte) (leftshirf<<1);//0000 1000
System.out.println(newleftshirf);//  20

整数的右移:

向右移动n位,则乘以n个2;

byte leftshirf = -50;
//0011 0010   //1100 1101+1=11001110;
byte newleftshirf=(byte) (neleftshirf<<1);
//右移位:1001 1100 //1001 1011  //0110 0100=64+32+4=100 -100
System.out.println(newleftshirf);//-100

第一周发布博客

第一周知识点汇总

第一周周报

你可能感兴趣的:(Java学习周报,java)