[解決済み】Javascriptで~~("ダブルチルダ")は何をするのですか?
2022-04-06 02:16:54
質問
今日、オンラインゲームの物理ライブラリをチェックしていたら、~~演算子に出会いました。 単一の ~ がビット単位の NOT であることは知っていますが、~~ は NOT の NOT になり、同じ値が返されるのではないでしょうか?
どのように解決するのですか?
ビット演算子はオペランドを暗黙のうちに符号付き32ビット整数に変換するので、小数点以下はすべて削除されます。これはオペランドが(浮動小数点)数であっても文字列であっても、また結果が数であっても機能します。
つまり、降伏するのである。
function(x) {
if(x < 0) return Math.ceil(x);
else return Math.floor(x);
}
場合のみ x が-(2)の間にある場合 31 ) と 2 31 - そうでない場合は、オーバーフローが発生し、数値が折り返されます。
これは、関数の文字列引数を数値に変換するのに便利だと思われるかもしれませんが、オーバーフローの可能性があることと、整数以外での使用は正しくないので、私は、quot;コードゴルフ"を除いて、この方法で使うことはありません(笑)。
すなわち
プログラムのソースコードから無意味にバイトを削り取り、可読性と堅牢性を犠牲にする) 私なら
+x
または
Number(x)
の代わりに
これがいかにNOTのNOTであるか
例えば、-43.2という数字は。
-43.2 <サブ 10 = 11111111111111111111111111010101 <サブ 2
を符号付き(2の補数)32ビット2進数で表現します。(JavaScriptでは小数点以下は無視されます)ビットを反転させると
NOT -43 <サブ 10 = 00000000000000000000000000101010 <サブ 2 = 42 <サブ 10
再び反転させると得られる。
NOT 42 <サブ 10 = 11111111111111111111111111010101 <サブ 2 = -43 <サブ 10
とは異なります。
Math.floor(-43.2)
負の数はゼロから離れるのではなく、ゼロの方向に丸められるという点です。(floor関数は-44となり、数値が正か負かに関係なく、常に次の小さい整数に切り捨てられます)。
関連
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み】未定義のプロパティ 'bind' を読み込めない。React.js【重複あり
-
[解決済み】JavaScriptで「無効な日付」のDateインスタンスを検出する
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Failed to load resource: net::ERR_FILE_NOT_FOUND loading json.js
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み] テスト
-
[解決済み】未定義のプロパティ 'bind' を読み込めない。React.js【重複あり
-
[解決済み】FirefoxでGoogle Maps V3をリモートで使用すると「googleが定義されていません」と表示される。
-
[解決済み】WebSocket接続に失敗しました。WebSocket のハンドシェイク中にエラーが発生しました。予期しない応答コードです。400
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。
-
[解決済み] JavaScriptの配列からランダムな項目を取得する【重複
-
[解決済み] JavaScriptの「ダブルチルド」(~~)演算子とは何ですか?[重複しています]。
-
[解決済み] 生年月日をYYYYMMDDのフォーマットで入力して年齢を計算する。