黑马程序员技术交流社区

标题: &的问题 [打印本页]

作者: vipzh    时间: 2012-12-1 13:17
标题: &的问题
  &是位运算符,表示按位与运算,怎么理解?
作者: 方建平    时间: 2012-12-1 13:19
0 & 1 = 0
1 & 0 = 1
1 & 1 = 1
0 & 0 = 0

作者: ljhheima    时间: 2012-12-1 13:33
&&表示两个语句为真才为真,
&表示是、两个二进制数,相对应的两位为真才为真。
如1101&0101==0101
作者: 张远游    时间: 2012-12-1 16:59
几种按位运算符:
  1. 按位与运算(&):二元运算符。当被运算的两个值都为1时,运算结果为1;否则为0。
   2. 按位或运算(|):二元运算符。当被运算的两个值都为0时,运算结果为0;否则为1。
   3. 按位异或运算(^):二元运算符。当被运算的两个值中任意一个为1,另一个为0时,运算结果为1;否则为0。
   4. 按位非运算(~):一元运算符。当被运算的值为1时,运算结果为0;当被运算的值为0时,运算结果为1。
它们不像逻辑运算符(与运算&&、或运算||、非运算!)操作的是布尔值true或false,或者是一个能产生布尔值的表达式;“按位运算符”所指的“位”就是二进制位,因此它操作的是二进制的0和1。在解释按位运算符的执行原理时,顺便说说它们和逻辑运算符的区别。
   1. 逻辑运算符只能操作布尔值或者一个能产生布尔值的表达式;按位运算符能操作整型值,包括byte、short、int、long,但是不能操作浮点型值(即float和double),它还可以操作字符型(char)值。按位运算符不能够操作对象,但是在Java5.0及以上版本中,byte、 short、int、long、char所对应的包装器类是个例外,因为JAVA虚拟机会自动将它们转换为对应的基本类型的数据。
作者: 深井看海    时间: 2012-12-1 22:08
&(与运算),|(或运算),^(异或运算):
转换成2进制数来运算,0视为假,1视为真,最后转回数值得到结果  例:6&3=2;6|5=7;
&:二进制位进行&运算,只有1&1时结果是1,否则是0;
按位与的作用(获取发某一段数据)
与0做与运算,清0。
与1做与运算,保留原值。
按位与的特性(n和1按位与,结果还是n)

|:二进制位进行|运算,只有0|0 时结果是0,否则是1;
与0做按位或,可以保留原值(可以清0用)
与1做按位或,改写1(可以改1)
按位或的特性(n和0按位或,结果还是n)
^:任何相同二进制位进行^运算,结果是0;1^1=0,0^0=0;
   不相同二进制位^运算结果是1;1^0=1,0^1=1;
(特点:一个数异或同一个数两次,结果还是那个数)例: 7 ^ 4 ^ 4 =7,这可以起到了加密的作用,同时还能当作一种交换的方法,例:n=n^m;        m=n^m;//(n^m)^m;  n=n^m; //n^(n^m);
与一个数连续异或两次,还原!)

~:取反:所有位上的值,0变1,1变0。
正数取反,得到一个符号为1的负数,这个负数减一再取反得到负数的绝对值,然后再在这绝对值前面加上一个负号,就是正数的取反了
负数取反,(因为负数在内存中是补码进制存储,数值一律用补码来表示(存储),所以负数的补码是其绝对值的原码,取反再加1。)然后把这个负数的补码再取反就是这个负数的取反了

作者: 赵学刚    时间: 2012-12-2 01:53
建议跟&&区别理解,&:二进制位进行&运算,只有1&1时结果是1,否则是0;与&不同的是当左边为假时,&&运算后面的判断都不执行。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2