このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

連絡的

バイトオーダーとか

ポインターとキャストが(いずれ)わかったら、出力結果(表示)を予測してみよう。 #include main() { unsigned char c4[4] = {0x01, 0x02, 0x03, 0x04}; unsigned short s2[2] = {0x0001, 0x0002}; char *str = "hello"; unsigned u1 = *(unsigned *)c4; u…

またHelloプログラム

#include void print_word(unsigned w) { int i, c; for (i = 0; i >= 5) { putchar(65 + c); } }main() { print_word(0x3ee5ac87); putchar('\n'); } #include char g[] = "pmmfi";main() { char *p = g + 4; while (g (*p)--; write(1, p, 1); p--; } putc…

Helloプログラム

これだって Hello。イイカゲンにしなさい、ペシッ。 /* hello.c */unsigned g[2] = {0x6c6c6548, 0x000a216f};main() { int i = 0, c; while (c = i++[(char *)g]) putchar(c); }

変な動作

クイズ:なんでこんな動作をするのだろう? (これはイタズラコード; インテル32ビットCPU + gcc) /* trick.c */void bar() { printf("Hi, this is bar.\n"); printf("... byebye from bar.\n"); exit(0); }unsigned _bar = (unsigned)&bar;void foo(int a…

備忘メモ

低水準の基本的な概念・用語 - 檜山正幸のキマイラ飼育記 メモ編 データをビット/バイトのレベルで観察する - 檜山正幸のキマイラ飼育記 メモ編 数とビット模様 - 檜山正幸のキマイラ飼育記 メモ編 符号が関係するのは、符号拡張と算術シフト(MSB保存シフ…

2の補数、1の補数

「2の補数」、「1の補数」 -- もう最悪の用語法だな。 2の補数: 2n + 1 の補数の最上位ビット切り落とし 1の補数:(2n + 1 - 1) の補数 = ビットごとのNOT なんでこんな用語が生き残っているのだろう? 歴史的な遺物。代替表現がないのでそのままなのだろ…

レジスタ

レジスタはあんまり意識しなくていい。そもそも、レジスタが面倒だから高級言語があるわけだから。だが、次は知っていると納得する(知らないと困惑する)場面も多い。 演算はレジスタに入れてから行う。結果もレジスタに入る。 関数の戻り値は多くの場合レ…

unsignedが素敵な理由

代入やキャストやビット演算に際して、とても素直な振る舞いをする。符号付き、あるいは符号付き/符号なしが混じるとなんだか複雑になる。いちおうコンパイラは値(ビットパターンではない)を守ろうとがんばってくれるが、がんばりきれないときの挙動がよ…

意味、(低水準な)内容、場所

データに関しては、その意味(例:算術値)、内容(ビットコンビネーション、バイト列)、場所(アドレス、スタック、ヒープなどの領域の区分)を組にして考えるとよい。意味だけを考えてはうまくいかないし、不自然なことも多い。

英語がわからんが How much? その2

クイズ: 実行前にいくつになるか予想せよ。 /* and haw much? */ #include int main() { unsigned char u = UCHAR_MAX; signed char c = CHAR_MAX; unsigned char u2 = c; signed char c2 = u; u += 2; c += 2; u2 += 2; c2 += 2; printf("u = %d, c = %d\n…

How much? か How many? か(英語が)わからん

「左にシフトすると2倍」は違う。シフトはシフトと思えばそれでいい。いちいち翻訳しない。 /* haw much? */ #include int main() { unsigned char c = UCHAR_MAX; unsigned char d = c + 2; unsigned char e = c; unsigned char f = d; printf("c = %d, d =…

C99の解説、落とし穴

http://seclan.dll.jp/c99d/c99d00.htm http://www.aerith.net/cpp/typical_bug-j.html と、ここからリンクされたページ。

データ転送の原形

即値 レジスタ内容 -- 単にレジスタ レジスタ内容をアドレスとみなしてのメモリブロック -- [レジスタ] 組み合わせを考えると: 即値 → レジスタ 即値 → [レジスタ] レジスタ → レジスタ レジスタ → [レジスタ] [レジスタ] → レジスタ [レジスタ] → [レジス…

数とビット模様

人間は、数(number)とその計算に慣れている。 機械は、ビット模様(の物理的実現)を記憶、転送、操作するだけ。 数の世界とビット模様の世界にはギャップがある。二進数が2つの世界を翻訳するときの架け橋となる。 二進数は数(number)としての意味を持…

データをビット/バイトのレベルで観察する

文字列と整数の相互変換 実用上は、適切なライブラリ関数を探す。 練習としては、自前で作る。 文字列→整数 は、自前で作っても割と簡単。 整数→文字列 は、戻り値をどうするかで悩むかもしれない。変換ではなくて直接出力なら割と簡単putcharだけを使って(…

サンプル

/* rec.c */foo(int count) { printf("%4d: %p\n", count, &count); if (count return; } foo(count - 1); }bar(int count) { if (count > 0) { bar(count - 1); } printf("%4d: %p\n", count, &count); }main() { foo(10); printf("\n\n"); bar(10); } /* u…

今のPCの処理能力って?

横方向は空間方向、縦方向は時間方向として、ビットを1cm×1cmのマスで描くと、1秒間の処理はどのくらいのサイズの絵になるか? http://d.hatena.ne.jp/m-hiyama/searchdiary?word=16%bf%ca%a4%f2

ヘッダファイルの内容(概要)

http://www.st.rim.or.jp/~phinloda/cqa/cqa13.html より:<errno.h>(エラー) EDOM ERANGE errno<stddef.h>(共通の定義) NULL offsetof(型,メンバ指示子) ptrdiff_t size_t wchar_t<assert.h>(診断機能) NDEBUG void assert(int expression);<ctype.h>(文字操作) int isalnum(int c); int i</ctype.h></assert.h></stddef.h></errno.h>…

gccと関連コマンド

gccオプション -v 詳細表示 -E プリプロセス(標準出力) -S コンパイルのみ .s -c コンパイル&アセンブル .o 単独で呼べるコマンド cpp プリプロセッサ as アセンブラ ld ローダー cc1 コンパイラ本体(libexecの下のどっか、直接は呼ばないな)

低水準の基本的な概念・用語

ビットだけの世界がそこにある。 ビットコンビネーション、バイト、オクテット(octet)、ワード、レジスタサイズ いまどき、「バイトとオクテットは違います」なんていうヤツはいねーと思うが。 「レジスタっても何本もあるよ」というツッコミはあるかもね。 …

Simplelの論理式

Simplelの基本データ型は、整数(integer)と文字列(string)である。浮動小数点型(IEEE 754型)を入れるかどうかは考慮中、基本的には「必要性が判明するまで入れない」。整数はJavaScript仕様と合わせるため、 絶対値が2の53乗までのデータは正確に扱え…

Simple ELの構文ポリシー

Smartyは割と中立的な構文だが、それでもPHP臭さが若干はある。Smarty完全互換は苦しい。とは言っても、中途半端な独自構文は避けたい!それで、JavaScriptのサブセットになるようにしようと思う(JSONと同じポリシー)。制限されたJavaScript式ということだ…

Simple EL = Simplel

"Simple EL = Simplel" は、実用性を損なわない範囲内で、できるだけ単純にした式言語である。テンプレート内での使用を想定しているが他の目的でも使えるだろう。JavaScript, JSONの構文の影響を受けている。悩んでいる点参照を表す目印に'$'を使うべきか?…

分類タグ「連絡的」とは

同名のエントリーが分類タグ「連絡的」とは - 檜山正幸のキマイラ飼育記 (はてなBlog)にある。メモ編にも分類タグ「連絡的」を設けるが趣旨は同じ。本編をあまり連絡に使うと、どうも“雑音”になりそうなので、ある程度の一般性がある場合、まとめのとき以外…