分享
 
 
 

我的Thinking in Java学习笔记(四)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

逻辑运算符

逻辑运算符 AND(&&)?? OR(||)? NOT(!)? 都会得到一个boolean值,且他们只能用于boolean身上。逻辑表达式中的boolean无法使用类似于c/c++中的数值代替。注意,boolean被用于一个预期会出现string的地方,其值会自动转换为适当的文本形式,并且假如2个比较的基本数据类型不相同,也是可以比较的~例如10和10.0d,结果也是会返回true的

短路式的核定

这个的意思就是逻辑表达式中的部分语句可能因为逻辑运算符的使用不当,导致有些语句并没有经过判断,只要大家细心点,掌握知识牢靠就没什么问题~

位运算符

位运算符可以让你操作整数基本数据类型中的个别bit位,切记是整数基本数据类型!位运算符直接造作的是数据中的0和1,直接面向硬件,所以有的人说java无法控制底层硬件,这个说法是不正确的,你完全可以直接控制硬件~好象asm一样~

位运算符

AND(&)会在2个输入位全为1时,产生一个输出位1,否则为0;

OR(|)会在2个输入位有任意一个为1时,产生一个输出位1,当2个输入位全部为0时,输出0;

XOR(^)会在2个输入位上有且只有一个输入位为1时,产生输出位1;

NOT(~)也叫做"一的补数运算符",是一个一元运算符(其他的是2元预算符),他仅仅接受一个引数,并且产生相反位

注意,位运算符和逻辑运算符很想。但是他们是有区别的,我曾经见过一个招聘题目,其中就有让你阐述他们的区别,除了’~‘之外,任何一个位运算符都可以和赋值运算符=号合用,类似于+=

boolean,你可以在他身上执行除了not之外的任何一个位运算符;对于boolean而言,位运算符和逻辑运算符的唯一区别就是位运算符不做短路式,最后boolean是无法做位移运算的

位移运算符

位移运算符也是用来操作位的,也是只能作用在整数基本数据类型上在java中采用补码表示二进制数,在补码表示中,最高为为符号位,正数符号位是0,负数符号位是1,补码的规定如下:

对于正数来说,最高位是0,其余各位代表数值本身的二进制数;

对于负数来说,把该数的绝对值的补码按位取反,然后对整个数+1,取得该数的补码。如-1的补码为11111111,-1的绝对值补码是00000001,按位取反11111110,再加1,11111111

左移运算符(<<)会左操作数向左迁移,迁移的位数由右操作数决定(左移后,低位补0)a=a<<2,使a的各个二进制位左移2位,右补0,若a=00001111则a<<2=00111100,高位左移后溢出的位舍弃掉了在不产生溢出的情况下,左移一位相当于乘2,用这种方法来实现乘法,要比乘法运算快很多,所以有的公司在效率题目上,会出这样的题。

右移运算符(>>)会使左操作数向左迁移,迁移的位数由右操作数决定,面对带有正伏负号的迁移,右移运算符先会采用一种叫符号扩展的措施:如果原值为正数,高位补0;如果原值为负数,则高位补1。

此外,java中还增加了无正负号的右移运算符(>>>)采用的是零扩展措施:无论原值是正还是负。一律在高位补0,如果你操作的位移对象是char 、byte、short 的话,在位移进行的时候,会把他们先提升为int,才进行位移,当然结果也是int的。位移运算中位移的位数,对于int类型的数据来说,只有低位的5个bit位是有用的,对于long来说,只是低位的6个bit位是有用的。

位移运算符和其他运算符一样,也是可以和=号并用的,但是当在byte和short上进行无正负号的>>>=时候就有问题了,因为他们会先被提升为int,然后右移,再赋值回来,但是当他们赋值回来的时候,超过他们的容量大小的高位会被截去,就会产生很奇怪的数字-1

public class test

{

public static void main(String args[])

{

int i=-1;

long l=-1;

short s=-1;

byte b=-1;

i>>>=10;

System.out.println(i);//1

l>>>=10;

System.out.println(l);//2

s>>>=10;

System.out.println(s);//3

b>>>=10;

System.out.println(b);//4

b=-1;

System.out.println(b>>>10);//4

}

}

答案是?4194303、18014398509481983、-1、-1

4194303需要注意的是这个答案,因为第4个移位后的结果并没有传回b,所以才能显示正确的答案,这个答案之所以和第一个是一样的,因为b被提升成int b了,所以答案和int i的是一样的!

if-else 三元运算符

这个好象是java中唯一的一个3元运算符,呵呵~他的格式是

boolean-exp?value1: value2

如果boolean-exp的判断是true 则执行value1,如果为false,则执行value2,这个和if-else语句是一样的~但是他要比

if-else语句要精练,并且执行的效率要比他高!

需要注意的是:value2中的语句是要带有;号的,并且不能放进去System,out.println();之类的语句的,我们是用3元运算符要的是他的运算结果值,并不是if-else所能实现的控制程序流程。

逗号运算符

在java中,唯一能放;号运算符的地方,就是for循环中,这个我们会在以后讲到应用于string身上的operator+这个问题我在我的"java初学者容易出现的运算符问题"中已经提到了~在java中,假如+号在string之前出现,执行的是运算,而要是在string 后出现,则执行的是字符连接,例如

public class test

{

public static void main(String args[])

{

int x=1,y=2,z=3;

String s="string";

System.out.println(x+y+z+s);

System.out.println(s+x+y+z);

System.out.println(x+y+s+z);

}

}

显示6string

string123

3string3??

转型运算符

转型分为2类,自动转换和强制转换,自动转换就是系统自动进行的宽化转换,例如byte类型的b +1时,系统会自动把他的byte类型转化为int类型,你可以使用byte b=b+1;看看就知道了,系统就会告诉你possible loss of precision,因为你在加1的时候,b的值已经是int类型了,你也没办法再赋值回b了,系统在比int小的数据类型上进行运算时会把他们的值提升为int,而在和long运算时会提升为long,以此类推。所谓的强制转换,就是你告诉编译器,我知道b是个int类型但是他的表达值并没有超过byte的范围,你就放心的转化吧~也就是这么一句话:b=(byte)(b+1);他就会把int缩小为byte,但是假如你运算完的值大于了原来类型表达范围,但是你还要强制转换,发生了内存溢出,那么溢出的bit位会被抛弃,发生数据丢失现象。java中只允许除了boolean之外的基本数据类型的类型转换,这个要记牢

字面常量

一般而言,当你将某个常量放到程序中,编译器很清楚的知道要将他制成什么类型,但是有的时候为了避免模糊不清,我们就可以为常量搭配一些特殊的字符,来引导编译器的正常判断,在常量值后添加l/L指的是long类型,添加f/F指的是float类型,d/D指的是double类型。而十六进制的表达方法是以0x/0X开头,八进制是以0开头,但是java中不提供二进制的表达方法,你需要注意这几个类型所能表达的十六进制最大值

char 0xffff????? byte 0x7f??????? short? 0x7fff?? int? 0x7fffffff

java没有sizeof运算符

再谈优先级

还是那句话,不清楚的时候加括号~嘿嘿~也不用记那些烦琐的优先级了~

最后一点:当2个最够大的int相乘时所发生的溢出而导致的异常,java是不会在编译期或者是运行期报告的~这个应该算是他的一个小bug了~

我的下一篇文章会讲到流程控制,欢迎关注,有什么问题,可以这样联系我

E-mail molmd@163.net /163.com QQ:31349283 我们可以共同学习进步!

欢迎访问我的blog,http://blog.csdn.com/maoerzuozuo 里面有更多学习内容!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有