DAY7算法基础课——位运算(终于碰到个简单的)

第一种情况代码:

int main(){
    int n=10;
    //">>"右移运算 1010 右移3位 0001
	//             1010 右移2位 0010
	//             1010 右移1位 0101
	//             1010 右移0位 1010
	
	//"&" 按位与运算  0001 & 0001 = 1
	//                0010 & 0001 = 0
	//                0101 & 0001 = 1
	//                1010 & 0001 = 0      
    for(int k=3;k>=0;k--){
    	cout<<(n>>k&1);
	}


}

第二种情况代码:

例题:二进制中1的个数

给定一个长度为 𝑛 的数列,请你求出数列中每个数的二进制表示中 1 的个数。

输入格式

第一行包含整数 𝑛。

第二行包含 𝑛 个整数,表示整个数列。

输出格式

共一行,包含 𝑛 个整数,其中的第 𝑖 个数表示数列中的第 𝑖 个数的二进制表示中 1 的个数。

数据范围

1≤𝑛≤100000,
0≤数列中元素的值≤10的9次方

输入样例:
5
1 2 3 4 5
输出样例:
1 1 2 1 2

 上代码(主要是lowbit的应用):

#include<iostream>
using namespace std;

//返回最后1位,例如0110 返回0010
int lowbit(int x){
    return x & -x;
}

int main(){
    int n;
    cin>>n;
    
    
    while(n--){
        int x;
        cin>>x;
        
        int res=0;
        
        //减去最后1位 例如2 -> 0010 返回也是0010 所以2-2=0,res=1;
        while(x) x-=lowbit(x),res++;
        
        cout<<res<<" ";
        
    }
}

 这里稍微涉及到原码反码补码的应用,对于正数来说三码合一,负数的话,反码是原码取反,补码是反码上+1。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当然可以!下面是对Java位运算和枚举法的简要解释: ### 位运算运算是对二进制数进行操作的运算符。Java中包含六种位运算符: 1. 与运算(&):将两个二进制数的每一位进行与操作,当且仅当两个数对应的位都为1时,结果的对应位才为1。 2. 或运算(|):将两个二进制数的每一位进行或操作,当两个数对应的位中有至少一个为1时,结果的对应位就为1。 3. 异或运算(^):将两个二进制数的每一位进行异或操作,当且仅当两个数对应的位不相同时,结果的对应位才为1。 4. 取反运算(~):将一个二进制数的每一位取反,即0变为1,1变为0。 5. 左移位运算(<<):将一个二进制数向左移动指定的位数,右侧空位补0。 6. 右移位运算(>>):将一个二进制数向右移动指定的位数,左侧空位补符号位(即如果原二进制数最高位为1,则移动后的空位补1,否则补0)。 位运算在Java中的应用场景很多,例如可以使用位运算进行快速的数值计算和状态控制。 ### 枚举法 枚举法是一种常用的算法思想,其基本思路是枚举所有可能的情况,然后从中找出符合条件的解。在Java中,可以使用枚举类型来实现枚举法。 枚举类型是Java中的一种特殊类型,它允许我们将一组有限的常量放入一个枚举类型中。例如,我们可以定义一个表示星期几的枚举类型: ``` enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } ``` 在枚举类型中,每个常量都是一个枚举类型的实例,我们可以使用枚举类型的实例来代表一个特定的值。例如,我们可以使用Day.MONDAY来表示星期一。 使用枚举类型可以让代码更加清晰和可读,同时也方便进行类型安全的编程。在实现枚举法时,我们通常会将枚举类型作为输入参数,然后枚举其中的所有可能情况,找出符合条件的解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值