![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
懂JAVA的帮帮忙呀!
练习:将一个整数110从右端开始的4-7位变为0用JAVA遍出来呀我才开始学习这道联系题我就是转不过来提示说是用底4位也就是15左移3位再按位取反然后再和110按位与可我...
练习:将一个整数110从右端开始的4-7位变为0
用JAVA遍出来呀
我才开始学习 这道联系题我就是转不过来 提示说是用底4位也就是15左移3位 再按位取反 然后再和110按位与 可我就是弄不懂
请各位高手帮忙呀!!最好把每步都解释下!
要能让我转过弯在加分哈!!!
谢谢!
110的二进制是1101110,从右端开始的4-7位是1110 也就是底4位,把这4为变为0,就要用的数应该是1110000吧。我是在孙鑫老师的视频是学习的,他提示说是用15左移3位后取反再与,要这样的话15二进制是00001111,左移3位是01111000。再取反是10000111呀,我怎么想也想不通! 展开
用JAVA遍出来呀
我才开始学习 这道联系题我就是转不过来 提示说是用底4位也就是15左移3位 再按位取反 然后再和110按位与 可我就是弄不懂
请各位高手帮忙呀!!最好把每步都解释下!
要能让我转过弯在加分哈!!!
谢谢!
110的二进制是1101110,从右端开始的4-7位是1110 也就是底4位,把这4为变为0,就要用的数应该是1110000吧。我是在孙鑫老师的视频是学习的,他提示说是用15左移3位后取反再与,要这样的话15二进制是00001111,左移3位是01111000。再取反是10000111呀,我怎么想也想不通! 展开
展开全部
我明白了,Java里面int类型都是32位的,你的需求是:将一个整数110从右端开始的4-7位变为0 (注意这里不是从左端开始数)
所以应该将
110:
00000000000000000000000001101110
变为:
00000000000000000000000000000110
也就是要 与运算 一个这样的数:
xxxxxxxxxxxxxxxxxxxxxxxxx0000111
这里x可以是0或者1(因为110前面的二进制位都是0,所以x是0和1都无所谓),但是如果要保持相对应的位不变,x须为1。(如果给定的整数是-110,那么前面的二进制位就都是1了,x为0就不能满足要求了)
所以
int: 15, binary:
00000000000000000000000000001111
左移3位,然后再取反,正好符合要求。:)
~(15 << 3), int: -121, binary:
11111111111111111111111110000111
----------------
下面的代码可以打印出一个整数的二进制值,供你测试使用(核心代码来自Java编程思想):
public class BitOperation {
public static void main(String[] args) {
int a = 110;
pBinInt("a",a);
pBinInt("15",15);
int b = ~(15 << 3);
pBinInt("b",b);
pBinInt("a&b",a&b);
}
// 打印一个整数的二进制值
static void pBinInt(String s, int i) {
System.out.println(
s + ", int: " + i + ", binary: ");
//System.out.print(" ");
for(int j = 31; j >=0; j--)
if(((1 << j) & i) != 0)
System.out.print("1");
else
System.out.print("0");
System.out.println();
}
// 打印一个长整数的二进制值
static void pBinLong(String s, long l) {
System.out.println(
s + ", long: " + l + ", binary: ");
System.out.print(" ");
for(int i = 63; i >=0; i--)
if(((1L << i) & l) != 0)
System.out.print("1");
else
System.out.print("0");
System.out.println();
}
}
所以应该将
110:
00000000000000000000000001101110
变为:
00000000000000000000000000000110
也就是要 与运算 一个这样的数:
xxxxxxxxxxxxxxxxxxxxxxxxx0000111
这里x可以是0或者1(因为110前面的二进制位都是0,所以x是0和1都无所谓),但是如果要保持相对应的位不变,x须为1。(如果给定的整数是-110,那么前面的二进制位就都是1了,x为0就不能满足要求了)
所以
int: 15, binary:
00000000000000000000000000001111
左移3位,然后再取反,正好符合要求。:)
~(15 << 3), int: -121, binary:
11111111111111111111111110000111
----------------
下面的代码可以打印出一个整数的二进制值,供你测试使用(核心代码来自Java编程思想):
public class BitOperation {
public static void main(String[] args) {
int a = 110;
pBinInt("a",a);
pBinInt("15",15);
int b = ~(15 << 3);
pBinInt("b",b);
pBinInt("a&b",a&b);
}
// 打印一个整数的二进制值
static void pBinInt(String s, int i) {
System.out.println(
s + ", int: " + i + ", binary: ");
//System.out.print(" ");
for(int j = 31; j >=0; j--)
if(((1 << j) & i) != 0)
System.out.print("1");
else
System.out.print("0");
System.out.println();
}
// 打印一个长整数的二进制值
static void pBinLong(String s, long l) {
System.out.println(
s + ", long: " + l + ", binary: ");
System.out.print(" ");
for(int i = 63; i >=0; i--)
if(((1L << i) & l) != 0)
System.out.print("1");
else
System.out.print("0");
System.out.println();
}
}
展开全部
与 一个 长度相同
4-7 是 0 其他都是 1 的 数
4-7 是 0 其他都是 1 的 数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int a=110;//二进制数是1101110
a=a & 7;
//你想从右4-7位也就是110来说左边4位了。那就用7(111)
结果a=6(0000110)
a=a & 7;
//你想从右4-7位也就是110来说左边4位了。那就用7(111)
结果a=6(0000110)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询