7

これは、以下のように演算子を使用せずに加算を実行する合計ロジックです。+

int add(int a, int b) {
   const char *c=0;
   return &(&c[a])[b];
}

returnステートメントがa&の追加にどのように沸騰するかを誰かに理解してもらえますかb

4

3 に答える 3

7

わかりました、あなたが思っているほど複雑ではありませんが、確かに何も使用すべきではありません。

cNULLはまたはへのポインタであり0、オフセット を取得します&0[a]。これは正確aに です。次に、[b]からのオフセットを取得します。&0[a]これは0+a+bです。

そして、それがすべての魔法です。

于 2013-11-08T08:15:15.767 に答える
3

これは、加算につながるポインタの加算です。

それを理解するために

 &c[a]  = c + a;

 &(&c[a])[b] = &c[a] + b = c + a + b;

あなたが取るとき&(&c[a])[b]、それは与えるでしょうc + a + b。c は 0 なので、 ですa+b

実際、演算子なしで 2 つの整数の合計を取得するには+、ビットごとの演算子と、全加算回路で使用されるロジックを使用します。

于 2013-11-08T08:18:25.743 に答える