能力值:
( LV12,RANK:660 )
|
-
-
2 楼
C语言里的位域+移位足够了~
|
能力值:
( LV12,RANK:370 )
|
-
-
3 楼
试试and或者test
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
楼上说的
用逻辑运算
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
MOV eax, 0ah
test eax, 4
jnz table; eax的第3个比特位为1时跳。
因为4的比特位是100, 所以测试的是第3个比特位。
|
能力值:
( LV9,RANK:290 )
|
-
-
6 楼
谢谢大家在帮忙,
to writer15:
你的方法我不太明白.....
|
能力值:
( 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);
}
|
能力值:
( LV9,RANK:290 )
|
-
-
8 楼
刚刚编写的小工具就是用了_itoa()与上面相似的代码,
不过觉得它的效率不高.....
|
能力值:
( LV9,RANK:770 )
|
-
-
9 楼
高效率就得用汇编了.C还是差点.
|
能力值:
( 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了
***********************************/
|
|
|