C 将Log_2的位旋转攻击扩展到64位

C 将Log_2的位旋转攻击扩展到64位,c,64-bit,bit-manipulation,32bit-64bit,C,64 Bit,Bit Manipulation,32bit 64bit,我已经在C#中实现了获取int的MSB的代码。我不确定需要如何处理日志引用表和主代码才能将代码扩展到64位 文本中唯一说明的是,它将需要2个以上的CPU操作,因此我推断更改很小。表格不需要更改。如果需要(),还需要一个级别的: if (ttt = v >> 32) { if (tt = ttt >> 16) r = (t = tt >> 8) ? 56 + LogTable256[t] : 48 + LogTable256[tt]

我已经在C#中实现了获取int的MSB的代码。我不确定需要如何处理日志引用表和主代码才能将代码扩展到64位


文本中唯一说明的是,它将需要2个以上的CPU操作,因此我推断更改很小。

表格不需要更改。如果需要(),还需要一个级别的

if (ttt = v >> 32)
{
    if (tt = ttt >> 16)
         r = (t = tt >> 8) ? 56 + LogTable256[t] : 48 + LogTable256[tt]
    else
         r = (t = ttt >> 8) ? 40 + LogTable256[t] : 32 + LogTable256[ttt]
}
else
{
    if (tt = v >> 16)
        r = (t = tt >> 8) ? 24 + LogTable256[t] : 16 + LogTable256[tt];
    else 
        r = (t = v >> 8) ? 8 + LogTable256[t] : LogTable256[v];
}

它被标记为C,但您正在使用C?源代码是C。我将转换为C。我不是要别人帮我做这件事。。。我该如何实现64位C(在C中)。假设您使用的是一种x86体系结构,我只会使用bsr指令。在gcc中,它可以作为_builtin_clzll()提供。这将使用一条指令计算对数。。。不幸的是,我不知道你怎么能把它翻译成C。为什么投反对票?这是一个完全合法的问题。bsr将是完美的。我想知道为什么MS没有在C#中实现这些低级命令。这是我第三次遇到需要的人。