开始看"java编程思想",写博客只是为了总结我的收获,免得忘记。很多内容都是
2017-08-16 14:22
302 查看
1.前加既后加的问题!
int a=1;int b=a++;
结果b=1;
运算顺序:b=a ;a=a+1;
int a=1;
int b=++a;
结果b=2;
运算顺序 ;a=a+1;b=a
以此类推,--也是一样的!
a+=b;
运算顺序是a=a+b;一次类推a-=b;a*=b;a/=b;a%=b;运算顺序都是一样的。
2.按位非(~)
int a=8;a=~a;
运算过程如下:
因为8为正,原码反码补码是一样的,所以
补码是:00000000 00000000 00000000 00001000
对补码取反,就是0就变1,1就变0!取反的时候,连符号位都要变
取反是:11111111 11111111 11111111 11110111
取反后的这个码被看做一个负数的补码。要求出这个补码的原码
补码-1(因为负数的反码求补码要+1,所以反过来就要-1)
反码:11111111 11111111 11111111 11110110
(注意,因为是负数,所以符号位不能变!)
原码:10000000 00000000 00000000 00001001
最后得出 a=~a a=-9
int a=-8
a=~a;
原码:10000000 00000000 00000000 00001000
(负数,符号位不能变)
反码:11111111 11111111 11111111 11110111
补码:11111111 11111111 11111111 11111000
(取反的时候,连符号位都要变)
对补码取反;00000000 0000000 0000000 000000111(是正数)
是正数,正数的原码反码补码一样,所以
原码也是:00000000 0000000 0000000 000000111,所以结果为
a=7
这么算很麻烦,但是有个规律,就是 a=~a; a=-(a+1)
3. && ,&,||,|,!,^
&&.||.!这三个大家肯定很熟悉,就是与、或、非。& | ^这三个符号比较陌生,其实是计算二进制的与或非
int a=4;
int b=5;
int c=a&b;
a=4:00000100
b=5:00000101
c=a&b:00000100:4
由上例可知,就是将数字转化成二进制码,每位进行与运算。
同理! | 就是或运算,而^是异或运算!
异或的真值表是:相同为0;不能为1.也就是:1^1=0,0^0=0,其余都得1
4.短路现象
public boolean a(){return true;
};
public boolean b(){
return false;
};
public boolean c(){
return true;
};
if(a() && b() && c()){}
我们都会习惯性的以为,java程序会分别进入a(),b(),c()
其实,这里会出现一种短路现象,因为与运算只要出现一个false,结果就肯定是false,所以当b()返回false的时候,java程序就已经知道结果为false,不能进入if,所以不会执行c(),,同理可证,||或运算也是一样的。
5.移位操作符
本次内引用了其他博客的内容:引用地址http://blog.csdn.net/sxhlovehmm/article/details/44244195Java移位运算符不外乎就这三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。
<< :带符号左移 >>:带符号右移
>>> :不带符号的右移 <<<:不带符号的左移
无符号右移后前面补0,而带符号右移是补符号位,也就 是第一位,负数补1,正数补0
左移运算规则:
按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
当左移的运算数是int 类型时,每移动1位它的第31位就要被移出并且丢弃;
当左移的运算数是long 类型时,每移动1位它的第63位就要被移出并且丢弃。
当左移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。
a=10: 00000000 00000000 00000000 00001010
2<<a; 00000000 00000000 00000000 00101000
右移运算规则:
按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1
当右移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。
例如,如果要移走的值为负数,每一次右移都在左边补1,如果要移走的值为正数,每一次右移都在左边补0,这叫做符号位扩展(保留符号位)(sign extension ),在进行右移
a=10: 00000000 00000000 00000000 00001010
a>>2; 00000000 00000000 00000000 00000010
a=-10:10000000 00000000 00000000 00001010
a>>2:11100000 00000000 00000000 00000010
不带符号的左移右移就一个特点,全部用0补,不需要分正负
6.三元操作符
return i<10?12:20;等同于
if(i<10){
return 12;
}else{
return 20;
}
7.while(x=y)也可以编译的
当x和y是boolean的时候 while(x=y)是可以这么使用的!!相关文章推荐
- 发博客只是为了记录自己学习过程的东西,到时候要使用的时候忘记 免得在寻找
- 为什么很多公司都开始去oracle而使用mysql?(整理)Oracle和MySQL的主要区别 Oracle:客户端和命令窗口,都是由用户决定内容-> conn user_name/password;
- 一次工作记录,写一遍为了更好地记忆(有用的内容都是转的,自己写的只是过程)
- 写博客不是为了分享和记录,只是为了自己总结
- 经典蓝牙总结(之前所有的笔记都放在未知笔记里面,但是看很多招聘上都要求博客,所以就算是从今天开始吧)
- 据说每个大牛都是从斜技术博客开始的
- 开始写博客,毕业一年的收获
- 机器学习类技术博客的典型内容总结
- 最近本人每天会花5分钟把前5年的工作内容做一个总结,并分享成多篇博客,让大家可以学习,交流。
- 开始有计划的通过博客总结学习android
- [python]你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。
- 第 0006 题:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词
- luckywang1103的专栏的博客--内容很多,涉猎很广,很不错
- 开始写博客的第一天,小小的纪念一下,为了消化自我的学习,也为了后来者少走弯路,每天都会更新,期待蜕变!
- 自己汉化qq2013国际版的C#代码。代码种没有错误检测,只是为了留个纪念(太烂的代码,bug很多。。。)。
- 关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”
- 自考总结——每一次经历都是收获
- 此刻的我只是为了写博客而写博客(流汗 ( ̄O ̄;))
- 说一些书籍吧,其实都是转贴于郎咸平的博客。这段时间其他书看少了,人会多很多的烦扰,所以要补上
- 书写是为了更好的思考/为什么你应该(从现在开始就)写博客