与(&)运算问题

wohegaofei 2008-01-09 04:56:48
程序目标:将一个整数110从右端开始的4~7位变为0;

程序
class Test
{
public static void main(String args[])
{
int m=110;
int b=15; //构建一个1~4位为1111的整数;
int u=b<<3; //让该整数有符号位移3位为4~7位为1111的整数
int q=~u; //对4~7位为1111的整数到反得到4~7位为0000其余位为1的整数
int w=q|m; //或运算进行比较
int h=q&m; // 进行与运算得到4~7位为0;


System.out.println(Integer.toBinaryString(m));

System.out.println(Integer.toBinaryString(q));
System.out.println(Integer.toBinaryString(w));
System.out.println(Integer.toBinaryString(h));

}
}
结果: 1101110
11111111111111111111111110000111
11111111111111111111111111101111
110
问题:为什么可以进行与运算进好像是110与 11111111111111111111111110000111进行了与运算而不是我想要的1101110与11111111111111111111111110000111进行的运算?而或运算却是1101110与11111111111111111111111110000111进行的却不是110与其比较.看起来矛盾的啊.
请教下高手们,怎样让1101110(即二进制)与其进行与运算?
...全文
67 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dracularking 2008-01-09
  • 打赏
  • 举报
回复
一个int是32位的


class Test {
public static void main(String args[]) {
int numb = 110; // 01101110b
int mask = 135; // 10000111b
int resu = numb & mask;
System.out.println(Integer.toBinaryString(resu));
}
}

/*
110
*/
xiaolingshi 2008-01-09
  • 打赏
  • 举报
回复
没有问题的
与和或都是01101110(110的二进制数)与11111111111111111111111110000111进行的
你把1101110补齐看一下就明白了 0000000000000000000000001101110
qybao 2008-01-09
  • 打赏
  • 举报
回复
have a try

int a = 110;
int b = a % 8; //保留右3位
a >>= 7; //右移7位
a <<= 7; //左移7位(这时右边7位都是0)
a |= b; //把开始的右端3位补回来

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧