問題タブ [int32]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Int32 を ushort に変換してから戻す
65535 より大きい整数値を ushort にパックするためのシステムを考案しようとしています。説明させてください。
SQL Server の IDENTITY 列を使用して Int32 値を生成するシステムがあり、Int32 ID を ushort にオーバーフローさせる運用中のクライアント API によって制限されています。幸いなことに、クライアントには、これらの ID を持つものの約 20 程度のインスタンス (パッケージと呼びましょう) しかなく、ローカルの兄弟間でそれらを一意にする必要があるだけです。一般的に受け入れられている解決策は、クライアントに送信する前に Int32 ID を ushort に変換することです (キャストではなく、変換を意味します)。ただし、このアプローチには問題があります。
- 65535 未満の一部の ID は、有効期限が切れていないため、任意の時点で特定のクライアントで引き続き有効である可能性があります。
- ID の衝突は発生しません。つまり、パッケージ ID 1 がクライアントに送信された場合、65536 に適用されたときに ushort を作成するために Int32 から 65535 が削除された回数を追跡するアルゴリズムも 1 になり、衝突が発生します。
- 返されたときに、ushort を Int32 に再構築できる必要があります。
この問題を解決するために利用できるのは、エコーされる単一の符号付きバイト フィールドであり、127 の値で遊ぶことができます (0 ~ 9 を別の目的で使用しているため、実際には 117 です)。これを「バイトフィールド」と呼びます。
3 つの異なる翻訳ルーチンについて説明しました。
- 乗法: ushort を作成するために Int32 から 65535 を削除した回数をバイト フィールドに格納します。これには、上で詳述した衝突の問題があります。
- シリアル化されたセッション状態: クライアントごとに、そのクライアントに関する事実に基づいてセッション ID を生成します。次に、クライアントがサーバーに再度アクセスしたときに、パッケージのインベントリを既知のデータベース ID に変換できるように、1 から配信されたパッケージの数までの 1:1 変換テーブルを保存します。シリアル化されたセッション状態をデータベースにバックアップし、1 秒間に数百から数千のトランザクションをサポートしたいため、これにはオーバーヘッドの問題があります。
- バイト フィールドが、Int32 を受け取り、それを ushort に変換する変換アルゴリズムの ID である、さまざまなアルゴリズム アプローチ。明らかに、これらの多くは単純な乗法 (変換できる ID の上限を増やすため) になりますが、いくつかは、より小さな境界 (32768 など) を使用して、数値を加算/減算して、数値にできるだけ近づける乗法でなければなりません。兄弟間で一意であることを保証できる番号。このアプローチはプロセッサを集中的に使用しますが、スケーラビリティを維持しながら衝突を回避できるようにする必要があります (ただし、このアプローチでは、アップグレードにより ushort の問題が自然に解消される前に上限に達することはありません)。
したがって、私の質問は次のとおりです:上記の私のアプローチよりも良い方法はありますか?そうでない場合は、特定の数値がより大きい場合に1〜65535の数値を生成するアルゴリズム(アプローチ#3の場合)に関して何を探す必要がありますか? 0 で、一方向ハッシュであってはなりませんか?
明確化: ushort の上限が最大の問題というわけではありません。クライアント API が ushort を使用しているため、クライアントのバイト フィールドを組み合わせてより大きな値を取得することはできません (クライアント API はアップグレードできませんが、最終的には存在しなくなります) )。
c# - C# では、UInt32 と Int32 を使用するとパフォーマンスに大きな違いがありますか?
既存のアプリケーションを C# に移植しており、可能な限りパフォーマンスを改善したいと考えています。多くの既存のループ カウンターと配列参照は、私が使用していた Int32 ではなく、System.UInt32 として定義されています。
UInt32 と Int32 を使用すると、パフォーマンスに大きな違いはありますか?
c# - 64ビットPCのint.MaxValueとは何ですか?
2,147,483,647
私は32ビットPCを持っているので、この行は私に答えを与えます。
答えは64ビットPCでも同じですか?
wpf - WPF: System.Windows.Int32Rect ---> System.Windows.Int32Point?
System.Drawing.Rectangle が System.Windows.Int32Rect にどのように置き換えられたか知っていますか? (非浮動小数点形状に関する限り...)
整数ポイントまたはサイズの同様の新しいオブジェクトはありますか? そうでない場合は、System.Drawing を使用しますが、それは 2 つのプラットフォームのマイナー ミックスのように思えますが、混在させるべきではありません。
とにかく、これについてどう思いますか?
c# - C# int、Int32、および列挙型
Ifはwhy doesint
と同義ですInt32
...コンパイルしない?一方
int ワードの上にカーソルを置くと struct System.Int32? が表示されますが、
c# - intまたはuintまたは何
このことを考慮
私は次のことと混同しています
- (1)intはどのようにして値-2147483646を保持できますか?(int範囲= -2,147,483,648〜2,147,483,647)
- (2)なぜこの印刷は-2147483648であるが、2147483648は印刷されないのですか(int範囲が超える場合、コンパイラはより適切な型を決定する必要があります)
- (3)どこかで変換された場合、なぜn.GetType()がSystem.Int32を与えるのですか?
編集1:修正を行いました:これで、私が取得しているものを取得できます。(そのために残念)
var n = i + 1; に
var n = i + 3;
Edit2:もう1つ、オーバーフローとして発生した場合、例外が発生しないのはなぜですか?
追加:オーバーフローが発生すると、タイプを設定するのは正しくありませんか
var n
var n = i + 3;
それに応じて別のタイプへのステートメントで?
これは意味がないので、より良いタイトルを提案することを歓迎します....少なくとも私
ありがとう
.net - Int32 と UInt32 の違いは何ですか?
Int32
とはどう違いUInt32
ますか?
それらが容量範囲の機能と同じである場合、問題は、どのような理由UInt32
で作成されたかです。UInt32
の代わりにいつ使用する必要がありInt32
ますか?
c# - Int32またはDoubleへのASCIIバイト配列
私はそれを完全に割り当てなしにするという使命を持ってライブラリを書き直しています。目標は、アプリの起動フェーズが完了した後、コレクションを0にすることです。
以前は、次のような呼び出しがたくさんありました。
これは文字列を割り当てることだと思います。同じことを自動的に行うC#ライブラリ関数が見つかりませんでした。BitConverterクラスを見ましたが、それはInt32がそれを表す実際のバイトでエンコードされている場合のみのようです。ここに、Int32を表すASCII文字を表すバイトの配列があります。
これが私がしたことです
より最適な方法でこれをすでに実行しているC#ライブラリ関数を知っている人はいますか?または、上記の実行を高速化するための改善(おそらく、1日の間に何百万回も呼び出されるでしょう)。ありがとう!
c# - 10 進数を int32 として格納できるかどうかを判別する
私はいくつかのカスタムシリアライズを行っています。スペースを節約するために、可能な場合は値が賢明であれば、小数をintとしてシリアライズしたいと考えています。大量のデータを扱っているため、パフォーマンスが懸念されます。私が使用する現在の方法は次のとおりです。
これは改善できますか?
c# - C#での積分型の最小値と最大値
電卓を使用して積分型のMIN値とMAX値を計算するための数式は何ですか。Integer.MaxやInteger.Minなどを使用するか、msdnで検索できることは知っていますが、計算方法を知りたいです。