• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

有以下函数func用于处理长整形变量V,请详细分析程序,解释

激情与速度 2017-04-10 浏览量:905
有以下函数func用于处理长整形变量V,请详细分析程序,解释算法的计算过程和程序的功能 
{ unsigned long t;
t=v^((v<<16)|(v>>16));
t&=~0xff0000;
v=(v<<24)|(v>>8)
return v^(t>>8);
}
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 将值V先左移16位,结果或上原值右移16位,再将这个结果和原值亦或,并将结果放到变量t中。

    把t的低16位清零。

    再将V的原值左移24位,结果或上原值右移8位,将结果赋值给v

    最后函数返回的是 v亦或上t右移8位之后的值。


    至于程序的功能,鬼才知道,可能是某种加密算法的一部分。


    • 发布于 2017-04-10
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:3
  • 在ARM系统中,为了具有普遍性,设本函数实参v为ABCD(每个字母为一个字节) (1)定义了一个无符号长整型变量t。 
    (2)首先(v << 16) | (v >> 16),变量v左移16位的结果CD00和变量v右移16的结果00AB相或得到CDAB。然后变量v和CDAB相与,即t=ABCD^ CDAB (3)~0xff0000的结果为f0ff(以字节为单位)。则t的结果为f0ff&(ABCD^ CDAB),得t=C0AB^A0CD。 
    (4)(v << 24) | (v >> 8),变量v左移24位的结果D000和变量v右移8位的结果0ABC相或得到v=DABC。 
    (5)变量t右移8位得到0A0C^0C0A,返回结果v=DABC^0A0C^0C0A=DCBA。  
    功能: 
        此函数的功能为把无符号长整型数按字节倒序输出。  
    ARM汇编实现此功能的代码:   
     
    EOR r1, r0, r0, ROR #16 
           BIC r1, r1, #0xff0000        
           MOV r0, r0, ROR #8        
           EOR r0, r0, r1, LSR #8
    • 发布于2017-04-11
    • 举报
    • 评论 0
    • 1
    • 0

  • 第一條是v左移16位和v右移16位然後取OR,取完後再與原來的v做XOR,指派給t

    第二條是取bitwise的NOT,0變1,1變0,所以是0x00ffff,然後和t做AND運算,指派給t,所以是取低16位

    第三條和第一條類似,v左移24位和v右移8位做OR,取完後指派給自己


    最後回傳v和t右移位8後取XOR的結果

    這可以用在

    1. 密碼學部分,各種加密

    2. Machine learning和deep learning

    3. 類神經網路,亂數部分和權重計算

    4. Hash降低collision

    以上供參考
    • 发布于2017-04-10
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

有以下函数func用于处理长整形变量V,请详细分析程序,解释