問題タブ [integer-arithmetic]
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 - C のマイナス記号なしの減算
演算子なしでCで2つの整数を減算するにはどうすればよい-
ですか?
c++ - 完璧な正方形と完璧な立方体
数値が任意の数値の2乗であり、キューブと同じであるかどうかを確認するための事前定義された関数がC++にありますか。
c - 任意の大きな整数値をメモリに格納するにはどうすればよいですか?
long データ型の最大値より大きい整数値を格納する必要があります。この値をメモリに保存して操作するにはどうすればよいですか?
可能であれば、例を通して説明してください。
math - 32 ビット固定小数点オーバーフロー
私は 32 ビットの Windows PC で「初期のコンピューティング」を行っており、その限界を調べています。
さて、2**32 は 4,294,967,296 です。
完全にOKで、
適当にオーバーフロー。
私を困惑させるのは、
オーバーフローしますが、積 4294967290 は範囲内にあります。
興味のある人はいますか?
bash - Bashスクリプトに数字を追加するにはどうすればよいですか?
この Bash スクリプトがあり、16 行目に問題がありました。15 行目の前の結果を取得して、16 行目の変数に追加するにはどうすればよいですか?
c - 符号なし整数減算は動作を定義していますか?
結果が負になるときに、同じタイプの別の整数から符号なし整数を減算する際に問題があると思われる人からのコードに出くわしました。そのため、このようなコードは、ほとんどのアーキテクチャで機能する場合でも正しくありません。
これは私が見つけたC標準からの漠然と関連する唯一の引用です。
結果の符号なし整数型で表現できない結果は、結果の型で表現できる最大値より1大きい数を法として減少するため、符号なしオペランドを含む計算はオーバーフローすることはありません。
その引用符は、右のオペランドが大きい場合、モジュロ切り捨て数のコンテキストで意味を持つように演算が調整されることを意味すると考えられます。
すなわち
0x0000-0x0001 == 0x 1 0000-0x0001 == 0xFFFF
実装に依存する署名付きセマンティクスを使用するのとは対照的に:
0x0000-0x0001 ==(符号なし)(0 + -1)==(0xFFFFだけでなく、0xFFFEまたは0x8001)
どちらまたはどのような解釈が正しいですか?それはまったく定義されていますか?
r - 大きな整数の乗算
111111111*111111111
と同じであるを乗算しようとしましたが、111111111^2
間違った結果が得られました。を与えるはず12345678987654321
ですが、代わりに丸め誤差を与えます。長い数値には特別な変数タイプを使用する必要がありますか、それともこれはRのバグですか?
performance - パーセンテージを計算するための浮動小数点乗算の簡単な代替手段
私はArduinoで高速に実行し、整数のパーセンテージを大まかに概算する必要があるコードを書いています。
たとえば、ある数値の 90%、70%、30% などを見つけたいとします。x * 0.9; または x * 0.3; しかし、速度が必要なので、浮動小数点計算は避けたいです。単純に 2 のべき乗で除算する場合は、ビット単位のシフトを行いますが、整数を使用して 90%、80% などを概算するための同様の手法はありますか?
c++ - int と uint が uint を返すのはなぜですか?
int と unsigned int は unsigned int を返します。そうすべきですか?
次のコードを検討してください。
c# - ushort + ushortがintに等しいのはなぜですか?
以前、今日私は2つのushortを追加しようとしていましたが、結果をushortにキャストし直す必要があることに気付きました。(意図しないオーバーフローを防ぐために)uintになったのではないかと思いましたが、驚いたことに、それはint(System.Int32)でした。
これにはいくつかの賢い理由がありますか、それともintが「基本的な」整数型と見なされているためでしょうか?
例:
編集:GregSの回答が言うように、C#仕様では、両方のオペランド(この例では「a」と「b」)をintに変換する必要があるとされています。これが仕様の一部である理由の根本的な理由に興味があります。C#仕様でushort値を直接操作できないのはなぜですか。