私はこのコードに出くわした:このmin()関数はどのように機能しますか?
int __min(int a, int b) {
return ((a)-(((a)-(b))&((b)-(a))>>31));
}
私はそれが2の補数とは何かを持っており、それが唯一の符号付き32ビット整数のために動作しますが、その後、私は迷ってしまいましたことをことを想像することができます。
私はthis questionを見つけましたが、機能が関連しているとは思いませんか、間違っていますか?
だから私は2つの質問があります。この機能は動作しないのはなぜ
- を?
(a<b)?a:b
が機能しない可能性があります。この機能は、この機能か、この機能が楽しいために複雑すぎるのでしょうか?
EDIT:機能はGPUのために書かれているので、私は@Banex分岐を避けるためにされて、このようにそれを書くことの目的について権利かもしれないと思います。
私は正確さを保証することはできませんが、私は、この機能の主なポイントは、分岐を避けるためです想像することができます。 – Banex
@Banexこの関数はgpu用に書かれていますが、これは意味があると思います、良い点です! –
また、実質的に整数オーバーフローを含むパスを最適化することができ –