【黑马程序员】 Java 进制转换、位运算、逻辑运算

发布时间:2017-2-27 10:23:39 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"【黑马程序员】 Java 进制转换、位运算、逻辑运算",主要涉及到【黑马程序员】 Java 进制转换、位运算、逻辑运算方面的内容,对于【黑马程序员】 Java 进制转换、位运算、逻辑运算感兴趣的同学可以参考一下。

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------   一.  计算机中的进制表示  二进制:用0-1表示,满2进1 八进制:用0-7表示,满8进1 十进制:用0-9表示,满10进1 十六进制:用0-9,A~F表示,满16进1 如何计算7的二进制?(注意,这里7是10进制。)   二进制如何转十进制呢?   十进制转八进制如何转呢? 十进制如何转十六进制呢? 负数的二进制如何表示呢?(取反+1) int 类型的数据在内存中占32个二进制位即  4个字节,一个字节(byte)等于8个二进制位,6的二进制位为110,补齐23位为: 总结:八进制三位表示一位,所以八进制一位的最大值为7,即111=7,而十六进制四位表示一位,所以十六进制一位的最大值为15,即1111=15 二.  左移<< 定义: (将某个数的二进制位向左移动n个二进制位,并将已经移出的二进制位舍去,并在最右端也就是最低位补n个零,得出最新的结果)。 书写:3<<2表示将3所表示的2进制数向左移动2个二进制位。 步骤: 3<<2 1.      先将3转化为32位的2进制表示形式 2.      将转化出来的二进制数向左移动2个二进制位 3.      然后在最右端也就是最低位空出来的位置补充2个0 4.      算出最终结果   计算: 1.      计算3<<2的结果 2.      计算3<<1的结果 3.      计算3<<3的结果 根据以上的出左移的结论是: 其实就是用被移数乘以2的移动位数的次幂,而且往左移动越多,结果越大。   三.  右移>> 定义: (将某个数的二进制位向右移动n个二进制位,并将已经移出的二进制位舍去,并在最左端也就是最高位补n个与原来高位一样的数,得出最新的结果)。 书写:6>>2表示将6所表示的2进制数向右移动2个二进制位。 步骤: 6>>2 5.      先将3转化为32位的2进制表示形式 6.      将转化出来的二进制数向左移动2个二进制位 7.      然后在最右端也就是最低位空出来的位置补充2个0 8.      算出最终结果 计算方式和左移一样,区别在于,左移空缺位置固定是补充0,而右移空缺位置补充的数根据原来最高位的数来定,假如原来最高是1,则全部补1,否则补充0 示例: 通过计算,6>>2 = 1      6>>1=3 根计右移计算结果,可以得出规律,其实就是将被移数除以2的移动数的次幂,而且往右移动越多,结果越小(因为都将有效位置都移除掉了)。 注意:<< 和>>的计算速度是最快的,比其他任何计算方法都块。   四.  异或^(0=false,1=true)   false ^ false = false true ^ false = true false ^ true = true true ^ true = false 规律:两边相同为false,不同为true。 计算6^5 =3 6的二进制表示形式为 110 5的二进制表示形式为 101 异或运算:1表示true,0表示false。 7^4^4=7 7^5^5=7 7^8^8=7 根据上面3个的计算结果可以的出结论:一个数异或同一个数两次,结果还是那个数,这个特性可用来加密文件,就是将某一个文件用一个数进行异或一次之后,将不是原来的数据性质了,就不能使用了,那么再用这个数异或一次就被解密了,还原到原来的数了。     五.  与&运算符(0=false,1=true) false & true = false false & false = false true & true = true true & false   false 6&3 =2 六.  或|运算符号(0=false,1=true) false | true = true false | false = false true | false = true true | true = true 6|5 =7           七. ~反码 ~6  = -7   八.  练习: 1.      请以计算机的角度用一种效率最高的方法计算2*8的结果。 利用左移的方法:2<<3     2.      int m = 8 , n =3 交换m,n的值。 A.      通过第三方变量int temp; int temp  ; temp = n; n = m; m = temp; B.      不用第三方变量() n = n+m; m = n - m n = n – m; 这种方式存在局限性,如果n和m的值比较大的时候,就超出int类型的空间范围,容易损失精度。 C.      采用异或的特性(技巧性的方法,大众阅读性差) n = n ^ m; m = n^ m; --> (n^m) ^m =n; n = n^m; -->n^(n^m)=m;     九.  在程序中如何计算出一个数的十六进制表现形式? 0000 0000 0000 0000 0100-1100 1110 0110      0000 0000 0000 0000 0100 1100 1110 0110 &  0000 0000 0000 0000 0000 0000 0000 1111 --------------------------------------------------------------------------      0000 0000 0000 0000 0000 0000 0000 0110   --> 以上& 15 后,单独的取出了十六进制数的第一个四位 那如果要单独取出十六进制数的第二个四位怎么办? -->可以将原来数字右移4为再 & 15就可以了 -->示例: 60的十六进制: int  n1 = 60&15 ; int temp = 60>>4 ; int n2 = temp & 15; -->十六进制数中不能以10,11,12,13,14,15表示,只能以A~F来表示,那么 在程序中怎么去的到这个字母表现? 例如: 14怎么去的它的字母?--> (char)14-10+'A';  

上一篇:hdu 4734 F(x) 数位dp (2013 ACM/ICPC Asia Regional Chengdu Online 1007)
下一篇:编程珠玑第五章

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。