簡體   English   中英

如何比較 L 的第二低字節與 M 的第二低字節的數值

[英]How to Compare the Numerical value of the Second-lowest Byte of L to the Second Lowest Byte of M

如何比較 L 的第二低字節與 M 的第二低字節的數值?

我有一個偽隨機數生成器,但我不確定如何對字節進行排序。 我需要找到“L”和“M”的第二低字節,然后根據哪個具有更大的“第二低”字節來增加變量“lHigh”或“mHigh”的值。

因此,例如,32 位十六進制數 0xAABB CC DD 的第二低字節將是“CC”值。

如果 L 高於 M 我想增加變量“lHigh”

所以基本上,我將 L 的 8-15 位與 M 的 8-15 位進行比較。

使用無符號值和最低表示最低有效:第二個最低有效字節是

#include <limits.h>
unsigned char L2 = L >> CHAR_BIT;
unsigned char M2 = M >> CHAR_BIT;

// Form a 1,0,-1 depending on compare result.
int compare = (L2 > M2) - (L2 < < M2);

要消除“最低字節”的位,使它們沒有任何后果,您可以通過AND與 0xFF one's complement一起“敲低這些位”。
( x & ~0xFF )

下面顯示了兩個 integer 值,然后進行比較。

int mmain() {
    // test 5 values crossing a threshold
    for( int i = 0; i < 5; i++ ) {
        int x = (1 << 8) + 254; // a start with 1 in "2nd lowest byte"
        int y = (1 << 8) + 4;

        x += i; // "lowest byte" of 'x' increases on each loop

        // show values
        printf( "%d : x(%d) y(%d) :: special-x(%d) special-y(%d) :: ",
            i, x, y, x&~0xFF, y&~0xFF );

        // show comparison
        puts( (x&~0xFF) == (y&~0xFF) ? "x==y" : "x > y" );
    }

    return 0;
}

Output

0 : x(510) y(260) :: special-x(256) special-y(256) :: x==y
1 : x(511) y(260) :: special-x(256) special-y(256) :: x==y
2 : x(512) y(260) :: special-x(512) special-y(256) :: x > y
3 : x(513) y(260) :: special-x(512) special-y(256) :: x > y
4 : x(514) y(260) :: special-x(512) special-y(256) :: x > y

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM