首页
社区
课程
招聘
关于二进制特定位判断问题(算法问题)
发表于: 2005-5-1 15:12 5540

关于二进制特定位判断问题(算法问题)

2005-5-1 15:12
5540
现在有一个数,如0xA,它的二进制是1010B,现在有没有一种方法(代码)可以判断其第N位是1还是0?
我试过用移位,但是都不成功,请问大家有没有什么方法呢?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
2
C语言里的位域+移位足够了~
2005-5-1 15:46
0
雪    币: 270
活跃值: (176)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
3
试试and或者test
2005-5-1 15:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼上说的
用逻辑运算
2005-5-1 16:18
0
雪    币: 212
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
MOV eax, 0ah
test eax, 4
jnz table; eax的第3个比特位为1时跳。

因为4的比特位是100, 所以测试的是第3个比特位。
2005-5-1 16:31
0
雪    币: 288
活跃值: (415)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
6
谢谢大家在帮忙,
to writer15:
你的方法我不太明白.....
2005-5-1 19:43
0
雪    币: 389
活跃值: (912)
能力值: ( LV9,RANK:770 )
在线值:
发帖
回帖
粉丝
7
void find(char a[],int n)
{
        for(int j=0;j<n;j++)
        {
                if(a[j]=='1')
                        cout<<j<<"==1"<<",";
                else
                        cout<<j<<"==0"<<",";
        }
}

void main( void )
{
   char buffer[20];
   int  i = 3445;
   long l = -344115L;
   unsigned long ul = 1234567890UL;

   
   _itoa( i, buffer, 2  );
   printf( "String of integer %d (radix 2): %s\n", i, buffer );

  find(buffer,strlen(buffer)+1);
                                                   
}
2005-5-1 21:58
0
雪    币: 288
活跃值: (415)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
8
刚刚编写的小工具就是用了_itoa()与上面相似的代码,
不过觉得它的效率不高.....
2005-5-1 22:06
0
雪    币: 389
活跃值: (912)
能力值: ( LV9,RANK:770 )
在线值:
发帖
回帖
粉丝
9
高效率就得用汇编了.C还是差点.
2005-5-1 22:20
0
雪    币: 288
活跃值: (415)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
10
我刚刚想了一种方法,还算可以的,不知大家还有没有更高效的方法呢?

#include <iostream.h>
#include <windows.h>

void main(void)
{
        int a;
        char bin[32];
       
        cout << "input a number:";
        cin >> a;

        _itoa(a, bin, 2);

        for(int i=0; i< strlen(bin); i++) //晕,原来strlen还可用在字符数组里面的啊?
        {
                if(((a >> i) & 1 )==0)
                        cout << "第" << i+1 <<"位的数字是0" << endl;
                else cout << "第" << i+1 <<"位的数字是1" << endl;

        }
}
/***********************************
算法是:
如23d=10111b 要测3位的话就是右移2次,
右移以后的数值是101b,然后与0001b进行与运算,
只留下最低位的数值,也就是只剩下1b了,
所以就能判断这个数的第3位是1了
***********************************/
2005-5-25 19:45
0
游客
登录 | 注册 方可回帖
返回
//