请教一个算法 ( 积分: 100 )

  • 主题发起人 主题发起人 kiths
  • 开始时间 开始时间
K

kiths

Unregistered / Unconfirmed
GUEST, unregistred user!
采用64位(8字节)的整数:(1) 时间(格式为MMDDHHMMSS,即月日时分秒):bit64~bit39,其中bit64~bit61:月份的二进制表示;bit60~bit56:日的二进制表示;bit55~bit51:小时的二进制表示;bit50~bit45:分的二进制表示;bit44~bit39:秒的二进制表示;(2)bit38~bit17,填000…1(3) 序列号:bit16~bit1,顺序增加,步长为1,循环使用。各部分如不能填满,左补零,右对齐。
 
采用64位(8字节)的整数:(1) 时间(格式为MMDDHHMMSS,即月日时分秒):bit64~bit39,其中bit64~bit61:月份的二进制表示;bit60~bit56:日的二进制表示;bit55~bit51:小时的二进制表示;bit50~bit45:分的二进制表示;bit44~bit39:秒的二进制表示;(2)bit38~bit17,填000…1(3) 序列号:bit16~bit1,顺序增加,步长为1,循环使用。各部分如不能填满,左补零,右对齐。
 
怎么没人冒个泡
 
这个很麻烦么?不就是一位为的填充数据阿
 
是啊,会搞得人不麻烦,可惜我不知道怎么搞
 
#include <time.h>
#include <stdio.h>
int main()
{
time_t t;
time(&amp;t);
tm *today = localtime(&amp;t);
__int64 ret;
__int64 tmp;
tmp = today->tm_mon;
ret = tmp << 60;
tmp = today->tm_mday;
ret |= tmp << 55;
tmp = today->tm_hour;
ret |= tmp << 50;
tmp = today->tm_min;
ret |= tmp << 44;
tmp = today->tm_sec;
ret |= tmp << 38;
tmp = 0x1;
ret |= tmp << 16;
__int64 result;
for(int i=1;
i<=10;
i++)
{
tmp = i;
result = ret | tmp;
printf(&quot;I64--result:%I64x/n&quot;,result);
//result为最后结果,本DEMO示范了产生10个这样的数字
}
return 1;
}
由于没有DELPHI环境,用VC6.0作了一个,希望有所帮助,你只要把相应的函数,数据类型改为DELPHI的就可以了
 
兄弟,我就是不知道这个鬼东西在delphi里面这么做,要换成sqlserver里面也就轻松搞定了,就是delphi里面不知道怎么作位操作
 
Delphi 位操作可以用 shl(左移), shr(右移)
或直接 用 *、Div
 
楼上的兄弟能告诉我怎么做吗?举个例子就可以了
 
result := (0xff shl 24) or (0x20 shl 16)
左移shl 右移shr
and or xor 等
 
楼上的兄弟上面的移位是什么意思?
 
0xff shl 4
左移4位
0xff->1111,1111->1111,1111,0000->0xff0
 
谢谢啦,我想我已经明白了
 
后退
顶部