题51:学习使用按位与&
public class Test51 {
public static void main(String[] args) {
int a = 10; // 原码==反码==补码:0000 1010 (正数的原码反码补码相等)
int b = -5; // 原码:1000 0101 反码:1111 1010(符号位不变,其余取反) 补码:1111 1011(反码+1)
// int c = 5;
// System.out.println(a&c);
// &:按位与,先求补码,再进行与运算,再判断结果为正数还是负数:为正数直接得结果,为负数 先减1,再求反
System.out.println("a&b的结果是否为 10 :" + ((a&b)==10 ? true:false));
/** 分析
* 0000 1010 & 1111 1011 == 0000 1010 (系统判断为正数--最高位为符号位0为正、1位负)
* 原码==反码==补码==0000 1010
*/
}
}
题52:学习使用按位或 |
public class Test52 {
public static void main(String[] args) {
int a = 10; // 原码==反码==补码:0000 1010 (整数的原码反码补码相等)
int b = -5; // 原码:1000 0101 反码:1111 1010(符号位不变,其余取反) 补码:1111 1011(反码+1)
// |:按位或,有真为真,全假为假--先求补码,再进行与运算,再判断结果为正数还是负数:为正数直接得结果,为负数 先减1,再求反得出原码
System.out.println("a|b的结果是否为 -5 :" + ((a|b)==-5 ? true:false));
/**
* 0000 1010 | 1111 1011 == 1111 1011 (系统判断为负数--最高位为符号位0为正、1位负)
* 1111 1011 -1 == 1111 1010
* 1111 1010求反码 ==1000 0101 ==-5
*/
}
}
题53:学习使用按位异或 ^
public class Test53 {
public static void main(String[] args) {
int a = 10; // 原码==反码==补码:0000 1010 (整数的原码反码补码相等)
int b = -5; // 原码:1000 0101 反码:1111 1010(符号位不变,其余取反) 补码:1111 1011(反码+1)
// ^:异或、相反为真--先求补码,再进行与运算,再判断结果为正数还是负数:为正数直接得结果,为负数 先减1,再求反得出原码
System.out.println("a^b的结果是否为 -15 :" + ((a^b)==-15 ? true:false));
/** 分析
* 0000 1010 ^ 1111 1011 == 1111 0001(系统判断为负数)
* 1111 0001 -1 == 1111 0000
* 1111 0000 求反 == 1000 1111 ==-15
*/
}
}
题54:取一个整数a 从右端开始的4~7 位
public class Test54 {
public static void main(String[] args) {
int a=36;
/**
* 36 == 0010 0010 -->从右端开始的4~7位: 0010
* 不太懂这个题想做什么
*/
}
}
题55:学习使用按位取反~
public class Test55 {
public static void main(String[] args) {
int a = 10; // 原码==反码==补码:0000 1010 (整数的原码反码补码相等)
int b = -5; // 原码:1000 0101 反码:1111 1010(符号位不变,其余取反) 补码:1111 1011(反码+1)
// 取反公式 ~x = -(x+1)
System.out.println(~a);
System.out.println(~b);
/**
* 分析 a
* 0000 1010--取反:符号位也取反-->1111 0101(系统判断为负数)
* 1111 0101 -1 == 1111 0100 --求反-->1000 1011 == -11
*
* 分析 b
* 1111 1011--取反:符号位也取反-->0000 0100(系统判断为正数)
* 直接得结果0000 0100 = 4
*/
}
}
总结:
1、计算机存储的是数字的2进制的补码,位运算要用补码来进行运算;
2、运算之前:
正数:原码=反码=补码
负数: 原码--》反码(原码求反,符号位不变)--》补码(补码+1)
3、运算后,系统根据补码判断为正数还是负数,然后输出:
正数:原码=反码=补码
负数:补码--》反码(补码-1)--》 原码(反码再求反,符号位不变)
4、区别:
求反:求反码,符号位是不变的
取反:符号位也要求反,是改变的
题56~60:略
--画图题(用rectangle画方形、用line画直线、用circle画圆形等)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)