0

2つの整数が与えられた場合、ifステートメントまたは選択(> =、>、および=)を使用せずに、最大、最小、および等式の2つの整数をどのように区別できますか。fminとを使用することを考えましfmaxたが、2つの整数が同じであるかどうかを知る方法も知る必要があります。

4

4 に答える 4

4

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 */
}
于 2012-09-15T22:56:01.183 に答える
1

どうですか...

(num1-num2) ? ((num1-num2) & (MAX_INT+1) ? NEGATIVE : POSITIVE) : EQUAL
于 2012-09-15T22:55:51.527 に答える
0

「差別化」とはどういう意味ですか?ある種の分岐操作なしで2つの数値に2つの異なる実行パスを選択させることはできませんが、理論的には、関数ポインターを使用して配列をロードし、数値を操作して、呼び出す異なる配列要素を選択することができます(呼び出しはブランチ)。

2つの異なる文字列ポインタを使用して配列をロードし、取得した数値に基づいてどちらを印刷するかを選択する方が簡単です。

数値を0または1に変換するには、奇数か偶数かに基づいて、たとえば1とAND演算します。数値を減算してゼロになるかどうかを確認することで、数値が等しいかどうかを判断できます。等。

于 2012-09-15T22:51:11.233 に答える
0

以下を使用してマスクを生成できます

signed int x = ...;
signed int y = ...;
mask = (x - y) >> 31;

y> xの場合も同様であり、maskそうでない場合も同様です(ただし、オーバーフローに注意してください)。次に、、、を使用して、このマスクを使用して結果を作成できます。-10&|~

于 2012-09-15T22:53:25.757 に答える