能力值:
( LV9,RANK:320 )
|
-
-
2 楼
第一个:0x0000000077777777*byt1/0x8000000000000000+0x0000000077777777*byt1/800000000-byt1/8+byt1
对否?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
好像是将数据存到一个字节的某几位, 但是将数据存进去之前,有个加减乘除。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
其实楼主得到的代码已经很明了了,这里还是给出详细的分析吧。
考虑到result1和result2的运算方式极为类似,所以这里只给出result1的详细分析,result2的结果楼主可以参考result1自行分析。
result1分析:
1、((unsigned __int64)(0x77777777i64 * byt1 ) >> 32) :先求0x0000000077777777*byt1的值,然后取该值的高32位最为最终值tmp1(作为无符号int64类型的值)。
2、 ((unsigned int)(((unsigned __int64)(0x77777777i64 * byt1 ) >> 32) - byt1 ) >> 31) :带入上步中得到的tmp1,得(unsigned int)((tmp1-byt1)>>31),该式表示取(tmp1-byt1)结果值的高33位作为该结果(将该值看作无符号int类型值),其实无符号int类型应该是32位的,所以该步骤中的最终结果应该是(tmp1-byt1)的第32位到第63位共32位的值,设为tmp2。
3、((unsigned __int64)(0x77777777i64 * byt1 ) >> 32): 先求0x0000000077777777*byt1的值,然后取该值的高32位最为最终值tmp3(作为无符号int64类型的值)。
4、((signed int)(((unsigned __int64)(0x77777777i64 * byt1 ) >> 32) - byt1 ) >> 3):将步骤3中的中间变量tmp3带入该式得,(signed int)((tmp3-byt1)>>3),该值表示取(tmp3-byt1)结果然后右移3位,因为最终转换为了signed int类型(有符号32位),所以该式最终结果为(tmp3-byt1)结果的第4位到第35位值(共32位,并作为有符号数),设该结果为tmp4。
5、所以result1的最终结果为tmp2+tmp4+byt1。
result2结果分析跟这个类似。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
谢谢,也在查这个问题
|
|
|