| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1487 人关注过本帖
标题:什么是按位异?
只看楼主 加入收藏
千夏
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-2-29
结帖率:25%
收藏
已结贴  问题点数:20 回复次数:4 
什么是按位异?
#include <stdio.h>

int main(void)
{
    unsigned long int number, num1, num2, mask;
    int i;
    char str[33];
   
    printf("Please input num1 and num2 : ");
    scanf("%lu %lu", &num1, &num2);
   
    /*********Found************/
    mask = __________________;
    number = num1 ^ num2;
    for(i=0; i<32; i++)
    {
        /*********Found************/
        str[i] = __________________;
        mask >>= 1;
    }
    str[32] = '\0';
    printf("%lu ^ %lu = %s\n", num1, num2, str);
   
    return 0;
}   
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: include number 
2016-03-03 22:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
就是对每一位进行异操作啊

授人以渔,不授人以鱼。
2016-03-03 22:19
千夏
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-2-29
收藏
得分:0 
回复 2楼 TonyDeng
不大明白,这题怎么做?
2016-03-03 22:24
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:10 
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    unsigned long int number, num1, num2, mask;
    int i;
    char str[33];

    printf("Please input num1 and num2 : ");
    scanf("%lu %lu", &num1, &num2);

    /*********Found************/
    mask = 2147483648;
    number = num1 ^ num2;
    for(i=0; i<32; i++)
    {
        /*********Found************/
        str[i] = (number & mask) ? '1' : '0';
        mask >>= 1;
    }
    str[32] = '\0';
    printf("%lu ^ %lu = %s\n", num1, num2, str);

    return 0;
}


[此贴子已经被作者于2016-3-4 08:26编辑过]


   唯实惟新 至诚致志
2016-03-03 22:39
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
此题目的难点在于如何将number按二进制顺序存入字符数组中。
设number=10=              00000000000000000000000000001010;
mask=pow(2,31)=2147483648=10000000000000000000000000000000;

第1次运算number&mask,i=0:
00000000000000000000000000001010
&
10000000000000000000000000000000
=
00000000000000000000000000000000(=0,false)
str[0]='0',mask >>= 1,mark=01000000000000000000000000000000

第2次运算number&mask,i=1:
00000000000000000000000000001010
&
01000000000000000000000000000000
=
00000000000000000000000000000000(=0,false)
str[1]='0',mask >>= 1,mark=00100000000000000000000000000000

......

第29次运算number&mask,i=28:
00000000000000000000000000001010
&
00000000000000000000000000001000
=
00000000000000000000000000001000(>0,true)
str[28]='1',mask >>= 1,mark=00000000000000000000000000000100

第30次运算number&mask,i=29:
00000000000000000000000000001010
&
00000000000000000000000000000100
=
00000000000000000000000000000000(=0,false)
str[29]='0',mask >>= 1,mark=00000000000000000000000000000010

第31次运算number&mask,i=30:
00000000000000000000000000001010
&
00000000000000000000000000000010
=
00000000000000000000000000000010(>0,true)
str[30]='1',mask >>= 1,mark=00000000000000000000000000000001

第32次运算number&mask,i=31:
00000000000000000000000000001010
&
00000000000000000000000000000001
=
00000000000000000000000000000000(=0,false)
str[31]='0',mask >>= 1,mark=00000000000000000000000000000000

最后str[33]="00000000000000000000000000001010"。综上,用1与number相对应的二进制位与运算,用结果的布尔值来判断对应位是0还是1,加入字符数组输出。

[此贴子已经被作者于2016-3-3 23:24编辑过]


   唯实惟新 至诚致志
2016-03-03 23:20
快速回复:什么是按位异?
数据加载中...
 
   



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

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