| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1516 人关注过本帖, 1 人收藏
标题:二进制样式的一排数,如何控制其变化。难!!
只看楼主 加入收藏
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
结帖率:93.33%
收藏(1)
已结贴  问题点数:5 回复次数:7 
二进制样式的一排数,如何控制其变化。难!!
有如下一排数,
0, 0, 0, 0
每一排4个数,然后把它加1(从最右边的一个数加起,满2就向前一位数进一,就好象把它看成是二进制数一样对待 ),然后显示出来,于是成了0 0 0 1,如此重复循环该操作,便有了如下的

这一组数据:
0, 0, 0 ,0
0 ,0 ,0, 1
0, 0, 1, 0
0 ,0 ,1, 1
0, 1, 0, 0
0, 1, 0, 1
0 ,1, 1, 0
0 ,1, 1, 1
1, 0 ,0 ,0
1, 0, 0 ,1
1, 0 ,1, 0
1, 0, 1, 1
1, 1, 0, 0
1, 1, 0 ,1
1, 1, 1, 0
1, 1, 1, 1
这时每一横排还是4个数,不是一个数,
俺是初学者,做这道题难点在于如何控制其满2就向前一位数进一,还有就是每一横排显示四个数,而不是一个数。想请教各位老师们!谢谢!!
搜索更多相关主题的帖子: 二进制 控制 变化 个数 一个数 
2017-11-16 00:28
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
这个以前简单做过……就逢二进一~
你会10进制的大数加法二进制的就会了~

顺便借用一段位运算实现加法的代码~仅供参考学习~

程序代码:
int add(int a, int b) //递归形式
{
    if(b==0) //递归结束条件:如果右加数为0,即不再有进位了,则结束。
        return a;
    int s = a^b;
    int c = (a&b)<<1; //进位左移1位,达到进位的目的。
    return add(s, c); //再把'和'和'进位'相加。递归实现。
}
int add(int a, int b) //非递归形式
{
    int s, c;
    while(b != 0)
    {
        s = a^b;
        c = (a&b)<<1;
        a = s;
        b = c;
    }
    return a;
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-11-16 04:36
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
主要问题应该是“每一排4个数”,不是一个4bit的数。
可以用4个Byte的数组或1个Byte的结构(8个bit成员)来表达。
2017-11-16 05:25
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:3 
图片附件: 游客没有浏览图片的权限,请 登录注册

#include <stdio.h>

typedef struct bit8
{
    unsigned char bit0:1;
    unsigned char bit1:1;
    unsigned char bit2:1;
    unsigned char bit3:1;
    unsigned char bit4:1;
    unsigned char bit5:1;
    unsigned char bit6:1;
    unsigned char bit7:1;
} BIT8;

typedef union byte
{
    unsigned char B;
    BIT8 b;
} BYTE;


main()
{
    BYTE a;
    for (a.B=0; a.b.bit4==0; ++a.B)
        printf("%u, %u, %u, %u\n", a.b.bit3,a.b.bit2,a.b.bit1,a.b.bit0);
}
2017-11-16 06:20
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:1 
程序代码:
#include <stdio.h>

int main( void )
{
    for( unsigned i=0; i!=16; ++i )
        printf( "%u, %u, %u, %u\n", (i&8)!=0, (i&4)!=0, (i&2)!=0, (i&1)!=0 );
}

2017-11-16 08:25
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:1 
关键还是取位问题,简单点可以这样~

程序代码:
#include<stdio.h>

#define N 4

int main( void )
{
    unsigned i;
    unsigned j;
    
    for (i=0;i!=1<<N;++i)
        for (j=N-1;j!=-2;--j)
            printf(j!=-1?"%u ":"\n",i>>j&1);
            
    return 0;
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-11-16 09:50
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
问题强调的“是4个数,不是一个数”。可能是想直接用4个变量来表达4个bit,而不是用位运算。
2017-11-16 10:05
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
谢谢各位老师们对俺的关心,我一定好好学习,来回报大家对我的关心。
2017-11-16 21:01
快速回复:二进制样式的一排数,如何控制其变化。难!!
数据加载中...
 
   



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

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