1基础2交换两个变量值3求绝对值4求某一十进制数的补码中包含的1的个数
1基础2交换两个变量值
//【交换值】任意给两个整数(int)值,请交互它们的值。
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入两个变量的值:");
int num1 = input.nextInt(),num2 = input.nextInt();
//常规做法:使用第三个变量
int temp;
temp = num1;
num1 = num2;
num2 = temp;
System.out.println("法一:交换后这两个变量的值是:" + num1 + " " + num2);
//不使用第三个变量,使用两个变量的加减操作
num1 = num1 + num2;
num2 = num1 - num2; //num2 = num1 + num2 - num2 = num1;
num1 = num1 - num2; //num1 = num1 + num2 - num1 = num2;
System.out.println("法二:再次交换后这两个变量的值是:" + num1 + " " + num2);
//不使用第三个变量,使用位操作:按位异或^:同0异1.
// 0和任何数做异或运算为此数本身,任何数与它自己做亦或为0.
num1 = num1 ^ num2;
num2 = num1 ^ num2; //num2 = num1^ num2 ^ num2 = num1
num1 = num1 ^ num2; //num1 = num1 ^ num2 ^ num1 = num2;
System.out.print("法二:再次交换后这两个变量的值是:" + num1 + " " + num2);
}
}
3求绝对值
//用位运算符求一个整数(int型)的绝对值
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个数:");
int num = input.nextInt();
//方法一:通过负数求反加1求
int result1 = num >=0 ? num : ~num + 1;
System.out.println("法一:此数的绝对值是:" + result1);
//方法二:通过位运算求
int temp = num >> 31;
int result2 = (num ^ temp) - temp;
System.out.print("法二:此数的绝对值是:" + result2);
}
}
4求某一十进制数的补码中包含的1的个数
//一个十进制整数(int型)的二进制表示形式(补码)中,包含的1个数?
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个数:");
int num = input.nextInt();
int count = 0;
for (int i = 0;i < 8;i ++) //8表示二进制的位数,可以设置成8,16,32,64等,结果也相应的不同。
if ((num >>> i & 1) == 1)
count ++;
System.out.print(num + "的二进制补码形式中1的个数有 " + count + " 个。");
}
}



