2011-02-03 7 views
0

C#にはC++のCHAR_BITに類似したものがありますか?C#では、C++のCHAR_BITに似ていますか?ファストアブス

更新:、不思議

private int Abs(int value) 
{ 
    int mask = value >> sizeof(int) * 8 - 1; 
    return ((value^mask) - mask); 
} 

// Compute the integer absolute value (abs) without branching 

int v;   // we want to find the absolute value of v 
unsigned int r; // the result goes here 
int const mask = v >> sizeof(int) * CHAR_BIT - 1; 

r = (v^mask) - mask; 

はここに私のC#バージョンである:基本的に
は、私がここにC++のバージョンがあり、分岐せずに腹筋を計算しようとしていますこれも動作します:

private int Abs(int value) 
{ 
    int mask = value >> sizeof(int) * sizeof(byte) - 1; 
    return ((value^mask) - mask); 
} 
+0

私はそれを疑う。 'char'はユニコード文字を表すと理解されます。他のすべての組み込み型は、設定された数のビットを使用すると理解されます。それは変化しないので、この情報をどこにでも保存する必要はありません。 –

+0

@JeffM:charは、C++またはC#でUnicode文字を表すことはできません(通常は)。 C#では、1つまたはそれ以下のユニコード文字にマップすることができるsinlge UTF-16 _code unit_のみを保持できます。 C++では 'char'は普通少なくとも8ビットですが、少なくとも21ビットでなければユニコード文字を保持できません。 –

+0

@Charles:私はそれを十分に認識しています。私が作ろうとしてきたことは、C++の型のサイズは実装/アーキテクチャ間で変わるかもしれないということでした。 C#では、すべてが言語仕様で固定されており、使用されるビットを追跡することは不要です。 'CHAR_BIT'マクロに相当するC#の存在に関する質問に答えると、"私はそれを疑います。 " 'sizeof'演算子を使用して、ある型が占めるバイト数を調べ、そこからビット数を決定すれば十分です。 p.s.、unicode character、これはおそらく間違った言葉ですが、アイデアはそこにあります。 –

答えて

4

C#のbyteをC++のcharと同等と考えると、CHAR_BITに最も近いのは8です。 C#では、byteは正確に8ビットであることが保証されています。

+1

'sizeof'はC#とC++のバイト単位のサイズなので、' CHAR_BIT'とはまったく異なります。あなたは何のために 'CHAR_BIT'を使っていますか? –

+0

@Charles、最後のコメントを傷つける...私は[sizeof](http://msdn.microsoft.com/en-us/library/eahchzkf%28v=80.aspx)でさまざまなことを見ていたC#と何らかの理由でsizeof(byte)が8であると思ったのですが、それは1です。いずれにしても、私はC++スタイル[fast abs]を書いています(http://www-graphics.stanford.edu/~seander /bithacks.html#IntegerAbs)これは、私がCHAR_BITの代わりに8を使用していないにもかかわらず、動作するようです: 'public int Abs(int value) { int mask = value >> sizeof(int)* sizeof(byte) - 1; return((value^mask) - mask); } ' – Kiril

+0

@Link:本当ですか?あなたは 'Math.Abs​​()'より速いと思う?マイクロソフトではCOBOLコーダーが数学ルーチンを書いていると思いますか?おそらく、おそらく最適化されたアセンブリコードのものよりも速いと信じていますか? – paxdiablo

3

byteは常に8ビット長であるため、同等の文字は8です。

1

プリミティブC#タイプのサイズが固定されているので、必要ありません。 intは32ビット整数、longは64ビット整数などであることが保証されています。

関連する問題