程序目标:将一个整数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(即二进制)与其进行与运算?
程序
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(即二进制)与其进行与运算?
int b = a % 8; //保留右3位
a >>= 7; //右移7位
a <<= 7; //左移7位(这时右边7位都是0)
a |= b; //把开始的右端3位补回来
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
*/