C言語におけるビットシフト演算子と符号付き数値表現

符号付き整数の内部表現 コンピュータ内部で整数を表現する方法にはいくつかの方式があります。特にC言語では、整数は補数形式(2の補数)として保存されます。以下に3つの表現方式を説明します: 原符号(Sign-Magnitude): 最上位ビット(MSB)が符号を表し、0は正、1は負。 1の補数: 負数は原符号の数値部を反転したもの。 2の補数: 1の補数に1を加えた形式。現在のコ ...

5月17日 23:20 投稿

C言語基礎ガイド:データ型から制御構文まで

データ型とC言語 基数の表示 // 10進数、8進数、16進数で値256を表示 #include <stdio.h> int main(void) { int val = 256; printf("dec=%d; oct=%o; hex=%x\n", val, val, val); printf("dec=%d; oct=%#o; hex=%#x\n", val, val, val); return 0; } 10進数は%d、8進数は%o、16進数は%xで表示します。接頭辞(0, 0x)を表示するには%# ...

5月17日 22:27 投稿

C言語基本構文の実践:入出力制御と数学演算

ループ制御による複数行・列のパターン描画 繰り返し処理を活用することで、同じ図形を縦方向に積層したり、横方向に並列配置したりすることができます。以下の例では、for文のイテレーション制御を利用して文字列アートを出力しています。 #include <stdio.h> int main(void) { int counter; /* 縦方向への連続出力 */ for (counter = 1; counter <= ...

5月17日 09:15 投稿

C言語におけるsignedキーワードの詳細解説

C言語では、整数型を符号付き(positive/negative/zeroを表現可能)または符号なし(non-negativeのみ)として扱うことができます。この区別には signed および unsigned キーワードが使用されます。 signed の役割 signed は整数型を明示的に符号付きとして宣言する修飾子です。C言語で利用可能な符号付き整数型は以下の4種類です: signed char:1バイト(-128〜127 ...

5月17日 03:05 投稿

ヒープ構造の理解と実装:データ構造入門から実践まで

前書き コンピュータサイエンスにおいて、ヒープ(Heap)は優先度付きキューの実装や効率的なソートアルゴリズム(ヒープソート)に使われる重要なデータ構造です。ヒープは完全二分木をベースにしており、配列による順序表現が可能で、メモリ効率と操作速度のバランスに優れています。 1. 木構造の基礎 1.1 木とは 木は非線形データ構造で、ノードの階層的集合です。根( ...

5月16日 12:26 投稿

C言語とWin32 APIで構築するコンソールスネークゲーム

開発の基盤となる技術要素 本プロジェクトでは、C言語の以下の機能を駆使して実装を行います。 構造体、列挙型、ポインタの活用 動的メモリ割り当てによる連結リストの構築 プリプロセッサディレクティブによるマクロ定義 Win32 APIを用いたコンソール画面の制御 コンソール画面の制御 Windowsのコマンドプロンプト上で動作するアプリケーションを作成するため、system ...

5月16日 01:27 投稿

C言語におけるデータのメモリ内表現

基本データ型とメモリサイズ 型説明 char文字型 short短整数型 int整数型 long長整数型 float単精度浮動小数点数 double倍精度浮動小数点数 整数型の分類 符号付きchar 符号なしchar short 符号付きshort 符号なしshort int 符号付きint 符号なしint 浮動小数点型の分類 float double 整数のメモリ表現 符号表現 ...

5月15日 11:23 投稿

シングルリンクリストの詳細な実装(C言語)

シングルリンクリストとは シングルリンクリスト(Singly Linked List)は、データをノードとして格納し、各ノードが次のノードへのポインタを持つ線形データ構造です。配列や順序リスト(シーケンシャルリスト)と異なり、データの挿入・削除が柔軟で、必要に応じて動的にメモリを確保できます。 シングルリンクリストの構造 シングルリンクリストは、各ノードが2つの部 ...

5月15日 05:09 投稿

組込みシステムにおけるC言語の基本概念

関数とポインタの理解 関数の役割と種類 関数は特定の処理を再利用可能なコードブロックとして定義する仕組みです。コードの再利用性を高め、保守性を改善する目的で使用されます。 関数定義と呼び出しの基本 #include <stdio.h> // 関数のプロトタイプ void printBanner(); int main() { // 3回関数を呼び出す printBanner(); printBanner(); p ...

5月14日 19:59 投稿

マージソートのアルゴリズムとその実装

配列マージの基本 マージソートの核となる処理は、すでに整列済みの2つの部分配列を効率的に結合することです。たとえば、ar1[] = {1,2,3,4} と ar2[] = {3,4,5,6,7} の2つの配列があるとします。これらを効率的にマージするには、それぞれの配列にポインタを用意しておき、値を比較しながら新しい配列に格納していきます。 #include <stdio.h> #include <stdli ...

5月14日 18:52 投稿