すのはら荘春原庄的雪

位运算

Toretto·2022-04-11 23:17·114 次阅读

位运算

1.按位与(&):

运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。

即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。

两个整数在按位与运算时每一位分别进行运算,如3&5=011&101=001=1;

按位或(|):

2.运算规则:参加运算的两个数只要两个数中的一个为1,结果就为1。

即  0 | 0= 0 ,  1 | 0= 1  , 0 | 1= 1  ,  1 | 1= 1 。

两个整数在按位与运算时每一位分别进行运算,如3|5=011|101=111=7;

3.异或(^):

运算规则:参加运算的两个数,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

即 0 ^ 0=0  , 0 ^ 1= 1  , 1 ^ 0= 1  , 1 ^ 1= 0 。

两个整数在按位与运算时每一位分别进行运算,如3^5=011^101=110=6;(异或可以理解成二进制相加但不进位的操作)

4.左移运算符(<<):

将二进制码整体左移指定位数,左移后空出来的位用‘0’填充。

如5<<2=101<<2=10100=20;

5.右移运算符(>>):

把操作数的二进制码右位移指定位数,左边空出来的位以原来的符号位填充。原来是负数就填充1,原来是正数就填充0。符号位不变。

复合运算

1、&=   例:a &=b       相当于a=a& b
2、|=   例:a |=b           相当于a=a |b
3、>>=  例:a >>=b    相当于a=a>> b
4、<<= 例:a<<=b      相当于a=a<< b
5、^=   例:a ^= b       相当  a=a ^b

贴一道题:

一般来说,一个正整数可以拆分成若干个正整数的和。例如,1=1,10=1+2+3+4 等。

对于正整数 n 的一种特定拆分,我们称它为“优秀的”,当且仅当在这种拆分下,n 被分解为了若干个不同的 2 的正整数次幂。注意,一个数 x 能被表示成 2 的正整数次幂,当且仅当 x 能通过正整数个 2 相乘在一起得到。

例如,是一个优秀的拆分。但是, 就不是一个优秀的拆分,因为 1 不是 2 的正整数次幂。现在,给定正整数 n,你需要判断这个数的所有拆分中,是否存在优秀的拆分。若存在,请你给出具体的拆分方案。

输入格式:#

输入文件只有一行,一个正整数 n,代表需要判断的数。

输入样例:#

在这里给出一组输入。例如:

6
 

输出样例:#

在这里给出相应的输出。例如:

4 2 
 

样例解释1
6 = 4 + 2 = 是一个优秀的拆分。注意,6=2+2+2不是优秀的拆分,因为拆分成的 3 个数不满足每个数互不相同。

 

AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long n,t;
    cin>>n;
    if(n&1)//判断n是否为奇数。
    {
        cout<<-1;
        return 0;
    }
    for(int i=32;i>=1;i--)
    {
        t=1ll<<i;//1ll是指将1转换为longlong类型,t的值为2的i次幂。
        if(t&n)//说明n的二进制第i+1位是1.
        {
            cout<<t<<' ';
        }
    }
    return 0;
}

 

posted @   cbmango  阅读(114)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示
目录