C

WGC1 第5章文字表現 5.3文字セット

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く 文字セット 文字データ型を基にして作られた複合データ型 文字の数学的な集合で、集合のメンバーの2項関係にある べき集合表現 正直理解不足。 Joel on Software の中で、Joelも以下のよう…

WGC1 第5章文字表現 5.2文字列

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く 5.2.1 文字列の形式 0で終わる文字列 長さ接頭辞付文字列 文字列長1バイトとゼロ個以上の8ビット文字コード 7ビット文字列 HLA文字列 > > > 最大長 > > > 長さ S t r i n g #0 記述子ベー…

WGC1 第5章文字表現 5.1 文字データ

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く 5.1.1 ASCII 標準ASCIIコード/ASCII文字セット 128種 1バイトの内半分の128個($80〜$FF)が残っている 32文字づつの4つのグループ グループ1 制御文字 キャリッジリターン(CR) ラインフィー…

WindowsとLinuxの共通ソースで日本語のコメントを書く場合、コード系はなににすればいいんだ?

C

お題 WindowsとLinuxの共通ソース 日本語のコメントを書く この場合のおすすめのソースのコード系WGC1 第4章 浮動小数点表現 4.7浮動小数点演算でやって、コメントを日本語で書いたのだが、どうしたものかと。 Unicodeにすればいいのかと思ったのだが、そう…

WGC1 第4章 浮動小数点表現 4.7浮動小数点演算

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く 4.7 浮動小数点演算 浮動少数点の加算と減算はC/C++などの高級言語 浮動小数点の乗算と除算は高級言語よりもアセンブラ言語の方が簡単 浮動小数点の加算と減算のコード #include <stdio.h> #include <assert.h></assert.h></stdio.h>…

WGC1 第4章 浮動小数点表現 4.6 浮動小数点の例外

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く IEEE浮動少数点規格では、浮動少数点プロセッサ がアプリケーションソフトウェアに通知すべき縮退条件 無効な演算 ゼロ除算 非正規オペランド 数値オーバーフロー 数値アンダーフロー 不正…

WGC1 第4章 浮動小数点表現 4.5 特殊な浮動小数点数値

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く QNaN:Quiet Not-a-Number 不定の結果を表す NaN:Not-a-Number 無効な演算が行われたことを示す 無限大を含む演算 演算 結果 n/±無限大 0 ±無限大×±無限大 ±無限大 ±ゼロ以外/0 ±無限大 無…

WGC1 第4章 浮動小数点表現 4.4 丸め

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く ガードビット 丸め システムが余分なガードビットを操作して、保持している ビットを変化させる仕組みを丸めと呼ぶ。 4つの丸めモード 切り捨て 大きい値への丸め 小さい値への丸め 最近値…

WGC1 第4章 浮動小数点表現 4.3 正規化と非正規化値

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く 浮動小数点の計算時に最大限の精度を維持するために、ほんとどの計算では 正規化された値を使う 正規化された浮動小数点では、仮数のHOビットに1が格納されている正規化とは、 仮数のHOビ…

WGC1 第4章 浮動小数点表現 4.2 IEEE浮動小数点形式

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く 4.2 IEEE浮動小数点形式 単精度、倍精度、拡張精度 Intelが設計した規格 4.2.1 単精度浮動小数点形式 C言語のfloat 8ビットの指数 24ビットの仮数(暗黙のHOビット1を含む) 仮数は通常1.0か…

WGC1 第4章 浮動小数点表現 4.1 浮動小数点演算の概要

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く 浮動小数点数値では、必要に応じて基数点(2進少数点)の位置を自由に移動させることができる。 仮数 ↓ ±■.■■e±□□ ↑ 指数 ex 9.88×10^9=9.88e+9 メリット 浮動少数点形式で広範囲の値を表せ…

WGC1 第3章2進数の算術演算子とビット演算 3.7データのバックとアンパック

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く 最上位ビットを空ける 31 21 20 14 13 0 > > > > > > > > > > 第1フィールド000-999 > > > > > > 第2フィールド00-99 > > > > > > > > > > > > 第3フィールド 0000-9999 ソース上のssn2 32…

WGC1 第3章2進数の算術演算子とビット演算 3.6 ビットフィールドとデータのパック その2

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く 2桁のみの日付形式というのは、2000年問題など、配慮に欠けているデータ形式。 そのため、年を0〜65535とし、32bitのデータ形式を使用する。 x86のunsigned intのイメージ 31 16 15 8 7 0 …

WGC1 第3章2進数の算術演算子とビット演算 3.6ビットフィールドとデータのパック

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く 一般に、CPUの処理が最も効率よく行われるのは、バイト、ワード、ダブルワードの各データに対してである。 しかし、ときには、8ビット、16ビット、32ビットのいずれでもデータ型を処理する…

WGC1 第3章2進数の算術演算子とビット演算 3.4.4 ANDを使用したモジュロnカウンタの作成

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く モジュロnカウンタの実行速度 実験コード #include <stdlib.h> #include <stdio.h> #include <limits.h> #include <time.h> int main(int argc, char *argv[]){ int cntr = 0; int i = 0; int n = 0; time_t time_start; time_t </time.h></limits.h></stdio.h></stdlib.h>…

WGC1 第3章2進数の算術演算子とビット演算 3.4シフトとローテート

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く 左シフトでは、最上位ビットの値は、この演算のキャリーアウト(桁上げ出力)になる 右シフトでは、第0ビットの値は、この演算のキャリーアウトになる 算術右シフトでは、最上位ビットの値は…

WGC1 第2章数値表現 2.10 固定小数点表現

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く 少数の値は0と1の間にあります。位取り基数点の右に数字を置くことによって、 少数の値を表現します。 2進数の場合は、基数点の右にある各ビットが、0または1に2のマイナスn乗を 掛けた値…

WGC1 第2章数値表現 2.8飽和

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く 大きいほうの値が小さいオブジェクトの範囲外である場合は、小さいほうの データ型の範囲内で最大の(または最小の)値にセットするという方法で、大きい値を 切り詰めます。 実験コード #in…

WGC1 第2章数値表現 2.6 2進値の便利な特性

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く (整数の)2進値で、ビット番号0のビットが1であればその数値は奇数であり、0であればその数値は偶数である 2進値のLOのnビットがすべて0であれば、その数値は2^nで割り切れる 符号なし2進…

WGC1 第2章数値表現 2.5 符号付の数値と符合なしの数値

C

2の補数値の符号反転 ビット反転 その結果に1を足す %0000_0101 2進数表現の5 %1111_1010 ビット反転 %1111_1011 1を足して 2の補数による-5にする %1111_1011 2の補数で表現した-5 %0000_0100 ビット反転 %0000_0101 1を足して2進数の5にする 補数計算って…

WGC1 第2章数値表現 2.4 数値の内部表現

C

Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く 2.4.2 ビット列 バイト バイト内のビット番号 7 6 5 4 3 2 1 0 8ビット ビット0 そのバイトのLO(low-order)ビットまたは最下位ビット ビット7 そのバイトのHO(hight-order)ビットまたは最…

WGC1 第2章数値表現 2.3数値と文字列の変換

C

WGC1 第2章数値表現 2.2記数法の続き10進数の文字列を整数値に変換するアルゴリズムは書いてある。 2進数にするアルゴリズムを書いたほうが面白かったかもしれない。10進数を指定のn進数の文字列に変換するitoa()は、非標準のCライブラリ関数なので 使えない…

WGC1 第2章数値表現 2.2記数法

C

WGC1 第1章 1.4グレートコードを特徴付けものの続き 2.2.2 基数 基数は基数点の左に置かれた各数に段階的に適用しいていく累乗値 少数点という用語は、10進数だけに用います。 1 2 3 . 4 5 10^2 10^1 10^0 10^-1 10^-2 少数点という用語は、10進数だけだった…

WGC1 第1章 1.4グレートコードを特徴付けもの

C

「基礎が大事」という本当の意味を理解しているか? はい、理解してなかったです。 1から基礎の勉強をやりなおします。 無意識でこなせるようになるまで。 まずは、仕事で使っている割合としては9割りであるC言語の基礎をやり直す。 (最近はコードを書かずに、…

conってなに?

はてなのカテゴリーはなんでソートして表示してくれないのか?で秀丸から以下のプログラムの実行をした sort <con >con「con」ってなにかというと、Windows(MS-DOS時代)からの予約デバイスで コンソール、すなわち現在入出力を行っている画面・キーボードを表す。 </con>…

10秒で理解するWindowsのバイナリがx86かx64なのかを確認する方法

dumpbin /headers で machine の値を確認すればよい。 exe、dll、lib、objに対して確認することができる。 (dumpbinはVisual Studioに付属している。) x64の例 exeの場合 D:\JDK\JDK1.6.0_13_x64>dumpbin /headers bin\java.exe|findstr machine 8664 machin…

世界史上最高のプログラマのコードを読んでみる。

いろいろなプロジェクトを歩き渡って来た。相対したコードも様々。 機能分割がうまくできてるもの、理解しやすいお手本になりそうなものから、応急処理的な つぎはぎだらけもの、最長不倒関数を遙かに上を行くようなとんでもコードまで。 ここはあのプロジェ…

Solarisスレッド(libthread)とPOSIXスレッド(libpthread)

Solaris10だとマルチスレッドアプリでも、libthreadもlibpthreadもリンクする必要ない!!の話題に少し関連。 Solarisには、Solarisスレッド(libthread)とPOSIXスレッド(libpthread)があって面倒くさいのよ。 ただ、thread_xxxをpthread_xxxをそれぞれに変換…

Solaris10だとマルチスレッドアプリでも、libthreadもlibpthreadもリンクする必要ない!!

マルチスレッドプログラムのコンパイルとリンク Solaris 10 リリースと Solaris 9 リリースのコンパイルとリンクには同じコマンドを使用できますが、次のいくつかの相違点を考慮するようにしてください。・Solaris 10 リリースでは、すべてのスレッド関数が …

Windowsのエラーメッセージの内容を通訳して"日本語で表示する"ツール(コマンド版)

『ErrMsg』はWindowsのエラーメッセージの内容を通訳してくれるツールというのがあったが、 同じようなコマンドを自作していた。日本語で表示できるし、入力は10進数でも16進数でもOKにしている。 ダウンロード先 http://bit.ly/ckaMqS 使い方 err2msg エラ…