有没有 按位比较两个值大小的函数?(比较二精制值大小)

teal 2003-09-12 07:50:30
我又两个void 指针 *p1,*p2 ,他们都指向16个字节的内存区 (128位)
现在我需要比较 这两个区域 前 n (n<128)位是否相等 ? 那个大哥提供一个系统函数,或者一个算法,一段程序?
谢谢 先
...全文
51 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
DaNiao 2003-09-15
  • 打赏
  • 举报
回复
我假设你是用Windows或者其他低位在前的系统
这样就很好办了

unsigned long long *a,*b; //我假设你的系统里long long是64bit的
a = (unsigned long long *)p1;
b = (unsigned long long *)p2;
a += 1; b+=1;
for(int i=0;i<2;i++)
{
if(a>b)
return "a>b";
else if(a<b)
return "a<b"
a--;b--;
}
return "a==b";

还有我的程序假设你的编译器是按64位或者32位或者16位对齐的
timepalette 2003-09-12
  • 打赏
  • 举报
回复
// return 0 or 1, index start at 1
int getbit(const void *p, int index)
{
unsigned char *pi = (unsigned char *)p;
int ord;
index--;
pi += index / sizeof(unsigned char) / 8;
ord = (index % sizeof(unsigned char)) / 8;
ord = 7 - ord;
return (*pi >> ord) & 1;
}

int bitncmp(void *p1, void *p2, int len)
{
int i;
for (i = 1; len > 0; i++, len--)
{
if (getbit(p1, i) != getbit(p2, i)
return (getbit(p1, i) > getbit(p2, i);
}
return 0;
}
teal 2003-09-12
  • 打赏
  • 举报
回复
随便 ,就低位在前吧
DaNiao 2003-09-12
  • 打赏
  • 举报
回复
你希望的字序是怎么样的?
就是说你认为这个128位的数是高位在前还是低位在前?

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧