| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2272 人关注过本帖
标题:位运算
只看楼主 加入收藏
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 19楼 吹水佬
可以~循环位移,左移一位,然后最低位补1~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-02 15:05
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10608
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用九转星河在2017-1-2 15:05:10的发言:

可以~循环位移,左移一位,然后最低位补1~

n = D0000000(16) = 11010000000000000000000000000000(2)
m = A0000001(16) = 10100000000000000000000000000001(2)
意思是n << 1 + 1 = 10100000000000000000000000000001(2)吧?
这个低位补1的动作与题目要求不符。

2017-01-02 15:53
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10608
专家分:43186
注 册:2014-5-20
收藏
得分:0 
不能溢出的话,将高位1对齐再判断也可以。
#include <stdio.h>

unsigned int _bitlshift(unsigned int n)
{
    if (n == 0)
        return 0;
    unsigned bits=8*sizeof(unsigned int)-1;
    while (((n>>bits)&1) == 0)
        n <<= 1;
    return n;
}

main()
{
    unsigned m, n;
    scanf("%u%u",&m,&n);
    if (_bitlshift(m) == _bitlshift(n))
        printf("yes");
    else
        printf("no");
}


[此贴子已经被作者于2017-1-2 16:03编辑过]

2017-01-02 15:59
爱是相反梦
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-12-23
收藏
得分:0 
回复 13楼 吹水佬
谢谢
2017-01-02 19:24
快速回复:位运算
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023643 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved