[解決済み] この4行のトリッキーなC言語のコードの背後にある概念
2022-03-26 06:40:59
質問
なぜこのコードは出力を与えるのでしょうか
C++Sucks
? また、その背景にはどのような考え方があるのでしょうか?
#include <stdio.h>
double m[] = {7709179928849219.0, 771};
int main() {
m[1]--?m[0]*=2,main():printf((char*)m);
}
テストする こちら .
解決方法は?
番号
7709179928849219.0
は、64ビットとして次のような2進数表現があります。
double
:
01000011 00111011 01100011 01110101 01010011 00101011 00101011 01000011
+^^^^^^^ ^^^^---- -------- -------- -------- -------- -------- --------
+
は符号の位置を示しています。
^
は指数を、そして
-
は、仮数(指数を除いた値)です。
指数と仮数を2進数で表現しているので、2倍にすると指数が1つ増えます。あなたのプログラムはこれを正確に771回行いますので、1075で始まった指数(10進数で表現すると
10000110011
になる。1846を2進数で表すと
11100110110
. その結果、次のようなパターンになる。
01110011 01101011 01100011 01110101 01010011 00101011 00101011 01000011
-------- -------- -------- -------- -------- -------- -------- --------
0x73 's' 0x6B 'k' 0x63 'c' 0x75 'u' 0x53 'S' 0x2B '+' 0x2B '+' 0x43 'C'
このパターンは、印刷される文字列を逆から見たものに相当します。同時に、配列の2番目の要素が0になり、ヌルターミネータを提供し、この文字列は、以下のように渡すのに適しています。
printf()
.
関連
-
[C] Error [Error] 代入の左オペランドとして lvalue が必要です。
-
コンパイルエラー:可変長オブジェクトが初期化されていない可能性があります。
-
[解決済み] 初期化でポインタ対象の型から修飾語を捨てる
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] マクロで無意味なdo-while文やif-else文を使っているのはなぜですか?
-
[解決済み] longをフォーマットするprintfの引数は何ですか?
-
[解決済み] なぜsizeof(x++)はxをインクリメントしないのですか?
-
[解決済み] LD_PRELOADのトリックとは何ですか?
-
[解決済み】glibcのstrlenはなぜこんなに複雑でないと高速に実行できないのか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Cエラー [エラー] 代入_Ashesの左オペランドにlvalueが必要です-プログラマーズ・シークレット
-
警告:代入がキャストなしで整数からポインタを作成する場合の修正方法に関する警告
-
C: 1を求める! + 2! + 3! + ... + n! (ループ)
-
[解決済み] Code::Blocks アプリケーションをコンパイルできない
-
[解決済み] mallocで文字列を確保する
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] 難読化Cコードコンテスト2006。sykes2.cの解説をお願いします。
-
[解決済み] longをフォーマットするprintfの引数は何ですか?
-
[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?
-
[解決済み] 2次元配列の反復処理において、ループの順序がパフォーマンスに影響するのはなぜですか?