Java方法的C语言100题

Java方法的C语言100题,第1张

题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画圆形等)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/674666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存