A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© houyudong 中级黑马   /  2014-4-27 19:00  /  2255 人查看  /  8 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 houyudong 于 2014-4-28 21:21 编辑

public class TestBit
{
        public static void main(String[] args)
        {
                int i = -3;//定义了一个整数型变量i,并对 i  赋值为-3
                int j = 11;//定义了一个整数型变量j,并对 j 赋值为-3
                int k = i & j;  //定义了一个整数型变量k,对k赋值 i & j,&代表位运算符。他们是怎么样进行运算的?               
                System.out.printf("%d\n", k);//对 k 的值进行输出,得出的结果是8.
        }
      结论:i & j 是不是相当于 i +  j,-3 + 11 = 8???
求解
}

8 个回复

倒序浏览
首先,我复制了你的代码,其运算结果是9,那么显然不是-3+11的结果
然后:
&这个运算符是按位与,既然是按位与运算,那么就是2进制运算。
你用int定义的整数,其实在内存中是个32位的2进制数,比如-3,在内存中就是:
   11111111 11111111 11111111 11111101    负数2进制为 其整数2进制按位取反加1。
而00000000 00000000 00000000 00001011   是正数8在内存中的样子。那么用了&运算后即
   00000000 00000000 00000000 00001001   这个数 其实就是正数9,这就是运算过程。
按位与: 1和0与就是0,1和1与就是1,0和0与也是0。每一位对应运算!

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
-3的二进制 1111  1111  1111  1101
11的二进制0000  0000   0000 1011
-3&11得    0000 0000  0000   1001转换成二进制应该为9
输出结果应该是9;
回复 使用道具 举报
本帖最后由 houyudong 于 2014-4-27 20:25 编辑
NNERO 发表于 2014-4-27 19:19
首先,我复制了你的代码,其运算结果是9,那么显然不是-3+11的结果
然后:
&这个运算符是按位与,既然是按 ...


我知道int类型占4个字节,为什么说是32位呢?还有,3和-3的二进制代码是什么?如何转换。请详细一点,谢谢。还有歌问题请教,static函数我用在构造函数上为什么要报错?
回复 使用道具 举报
    int k = i & j;  // 是先将i和j转换为2进制,再进行与运算, 与运算是0、1为0;1、1为1;
回复 使用道具 举报
houyudong 发表于 2014-4-27 20:16
我知道int类型占4个字节,为什么说是32位呢?还有,3和-3的二进制代码是什么?如何转换。请详细一点,谢 ...

首先要知道,一字节其实就是一个8位,这是约定俗成,4字节就是32位,
第二:
3的二进制代码在内存中就是:
00000000 00000000 00000000 00000011 这是3,因为是int,所以是32位。而-3是:
11111111 11111111 11111111 11111101 这是-3,
变换规则就是 正3  按位取反  然后加上二进制1,就得到了负数的二进制表达。取反就是0变1,1变0
关于静态:
首先静态的意义在于创建和对象无关的方法,类名直接调用。
然而构造方法是为了创建对象而存在的,用于初始化对象。
所以既然静态本意是与对象无关,那么构造方法静态化就是错的。
这不符合面向对象这种思想。
回复 使用道具 举报
给你举个例子吧
&这个叫做 与运算符例如6&3=2
结果是这个来的
将6和3转化成2进制
0110和0011
这两个数做比较 如果上下对应的值有一个为0则结果为0;都为1则结果为1演示如下:
0110
0011
------
0010
结果0010二进制转十进制结果为2
回复 使用道具 举报
位运算符
回复 使用道具 举报
& :即是逻辑运算符也是位运算符,做位运算时1相当于true,0相当于false
-3的二进制是   1111 1111 1111 1111 1111 1111 1111 1101
                      &
11的二进制是   0000 0000 0000 0000 0000 0000 0000 1011
                          ------------------------------------------
                          0000 0000 0000 0000 0000 0000 0000 1001    转化为十进制为:9
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马