[英]How to differentiate between two integers without equality operators?
給定兩個整數,如何在不使用if語句或選擇(> =,>和=)的情況下區分兩個整數(最大值,最小值和相等)。 我考慮過使用fmin
和fmax
,但是我還需要知道如何知道兩個整數是否相同。
假設2的補碼算法:
int intcmp(int int1, int int2)
{
int diff=int2-int1;
unsigned int udiff;
memcpy(&udiff, &diff, sizeof(diff));
if(!udiff)
return 0; /* the two integers are equal */
else if(udiff & 1<<(sizeof(udiff)*CHAR_BIT-1)) /* check the sign */
return +1; /* int1 < int2 */
else
return -1; /* int2 < int1 */
}
怎么樣...
(num1-num2) ? ((num1-num2) & (MAX_INT+1) ? NEGATIVE : POSITIVE) : EQUAL
“區別”是什么意思? 您不能在沒有某種分支操作的情況下使兩個數字選擇兩個不同的執行路徑,但是從理論上講,您可以使用函數指針加載數組並操縱數字以選擇要調用的不同數組元素(而調用是一種形式的科)。
您可以更輕松地加載帶有兩個不同字符串指針的數組,然后根據獲得的數字選擇要打印的數組。
您可以根據數字是奇數還是偶數與1進行與運算,將數字轉換為0或1。 您可以通過減去數字並確定是否為零來確定數字是否相等。 等等。
您可以使用以下內容生成遮罩
signed int x = ...;
signed int y = ...;
mask = (x - y) >> 31;
因此,如果y> x,則mask
為-1
,否則為0
(但要注意溢出)。 然后可以使用&
, |
,然后~
使用此掩碼構建結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.