我目前正在创建一个函数,它接受两个 4 字节无符号整数,并返回一个 8 字节无符号长整数。我试图将我的工作建立在这项研究描述的方法的基础上,但我所有的尝试都没有成功。我正在使用的具体输入是:0x12345678
和0xdeadbeef
,我正在寻找的结果是0x12de34ad56be78ef
。这是我到目前为止的工作:
unsigned long interleave(uint32_t x, uint32_t y){
uint64_t result = 0;
int shift = 33;
for(int i = 64; i > 0; i-=16){
shift -= 8;
//printf("%d\n", i);
//printf("%d\n", shift);
result |= (x & i) << shift;
result |= (y & i) << (shift-1);
}
}
但是,此函数不断返回0xfffffffe
,这是不正确的。我正在使用以下方法打印和验证这些值:
printf("0x%x\n", z);
并且输入的初始化如下:
uint32_t x = 0x12345678;
uint32_t y = 0xdeadbeef;
对此主题的任何帮助将不胜感激,C 对我来说是一门非常困难的语言,按位运算更是如此。