能力值:
( LV6,RANK:90 )
|
-
-
2 楼
对1取与就好了。
|
能力值:
(RANK:300 )
|
-
-
3 楼
func1 = (d1 mod 2)/d1
|
能力值:
( LV9,RANK:210 )
|
-
-
4 楼
我要求是有一个函数来实现这个功能,如: 当d1=1234567时,执行:
1234567 * func1(1234567) 相乘的结果是1 , 说明白一点,这个结果是一个64位数据,,但低32位是1
注意, 函数func1返回的是DWORD值, 这个函数func1如何实现?
|
能力值:
( LV9,RANK:170 )
|
-
-
5 楼
d1 为奇数 : 011b (3d)
func1(d1) 功能可以是 return d1|1 ; (汇编代码 and,d1,1) 011b按位与001
只要0位是置的,就肯定是奇数,反之肯定偶数(2的n次方+2的n-1次方,不加0位的1)!
d1 为偶数 : 010b (2d)
func1(d1) 功能可以是 return d1|1 ; (汇编代码 and,d1,1) 010b按位与001
这个值肯定是0 因为 d1的0位不等 1
|
能力值:
( LV9,RANK:170 )
|
-
-
6 楼
要求d1为奇数时,d1*func1(d1)=1 当d1为偶数时,d1*func1(d1)=0
可以扩展func1的功能
return (d1|1 )/d1;
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
int func1(int i){
if (i % 2)==0 return 1/i;
else return 0;
}
|
能力值:
( LV9,RANK:210 )
|
-
-
8 楼
谢谢大家讨论,不过答案都不满足题目要求,我还是给出答案吧:
#include "stdafx.h"
#include <windows.h>
DWORD func1(DWORD arg_0)
{
DWORD temp;
_asm{
mov eax, 1
mov edx, eax
mov esi, arg_0
sub edx, esi
test esi, eax
mov ecx, edx
jnz short loc_1000A808
xor eax, eax
jmp sub_1000A7F0
loc_1000A808:
add eax, ecx
imul ecx, edx
test ecx, ecx
jnz short loc_1000A808
sub_1000A7F0:
mov temp,eax
}
return temp;
}
int main(int argc, char** argv)
{
DWORD d1=12345;
DWORD x1=d1 * func1(d1);
return 0;
}
运行这段程序,可以看出,随便给d1一个奇数,x1的结果就是1。
这是从一个软件注册算法中移植过来的代码,觉得这个函数有点意思,就让大家分析一下。
虽然已分析出func1这个函数的功能,但我还是没有弄明白这里面的算法思想,请高手分析指点,谢谢!
|
|
|