我昨天接受了采访.
我被问到的一个问题是:如何用4个低位替换一个字节的4个高位.我们在这里谈论本地C,顺便说一句.
例如,考虑以下字节:AB输出应为:BA
好吧,那里的那个人告诉我它可以在一个命令中完成.我只是设法用3个命令做到了.
我问他答案,但他不情愿.
谢谢!
Omr*_*rel 10
uint8_t b = 0xab;
b = (b << 4) | (b >> 4);
Run Code Online (Sandbox Code Playgroud)
b 现在等于0xba.
这是你的意思吗?
我想这可能是你的面试官正在寻找的答案:
unsigned char a = 0xab;
a *= 16.0625;
Run Code Online (Sandbox Code Playgroud)
它简短而漂亮,但在编译时效率不高.
在x86上的gcc中,您可以使用ror单个内联汇编程序操作;
unsigned char a = 0x45;
asm("ror $4,%1" : "+r" (a));
printf("0x%x\n", a);
Run Code Online (Sandbox Code Playgroud)
输出0x54.
作为替代方案,正如OmriBarel在评论中所建议的那样,如果你可以做一些准备工作,那么查找也会起作用;
uint8_t* lookup = malloc(256);
unsigned int i;
for(i=0; i<256; i++) lookup[i]= i>>4 | i<<4;
uint8_t a = 0x54;
a = lookup[a];
printf("0x%x\n", a);
Run Code Online (Sandbox Code Playgroud)
输出0x45.
| 归档时间: |
|
| 查看次数: |
3060 次 |
| 最近记录: |