剑指offer中位运算技巧

本文提供了四个Java编程案例:计算Excel列号、统计二进制中1的数量、判断整数是否为2的幂以及计算两个整数二进制表示的差异。通过实际代码展示了算法实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class first {
  public static void main(String args[]){//A是第一列,B是第二列,z是第26列,AB是第27列,输入一串字符串,求是第几列
	  Scanner cin=new Scanner(System.in);
	  String s=cin.next();
	  int sum=0;
	  for (int i=0;i<s.length();i++){
		  sum=sum*26+s.charAt(i)-'A'+1;
	  }
	  cin.close();
	  System.out.println(sum);
  }
}

public class Second {
	public static void main(String args[]){//统计一个整数表示的二进制中最多有多少个1
		Scanner cin=new Scanner(System.in);
		int n=cin.nextInt();
		cin.close();
		int num=0;
		while(n!=0){
			n=(n-1)&n;//相当于将整数二进制最右边一个1变成0
			num++;
		}
		System.out.println(num);
	}
}

public class third {//判断一个整数是否为2的整数次方
	public static void main(String args[]){
		Scanner cin=new Scanner(System.in);
		int n=cin.nextInt();
		 cin.close();
		 n=(n-1)&n;//去掉唯一一个1
		 if (n==0)
			 System.out.println("是2的整数次方");
		 else
			 System.out.println("不是2的整数次方");
		 
	}

}

public class fourth {
   public static void main(String args[]){//输入m和n.计算改变m的二进制的几位才能得到m的二进制,比如10的二进制是1010,13的二进制是1101需要改变3位才能得到1101
	  Scanner cin=new Scanner(System.in);
	  int n=cin.nextInt();
	  int m=cin.nextInt();
          cin.close();
         int c=n^m;//先求异或
	  int num=0;
	  while(c!=0){
		  c=(c-1)&c;
		  num++;
	  }
	  System.out.println(num);
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值