mirror of
https://github.com/krahets/hello-algo.git
synced 2026-11-05 23:18:41 +08:00
deploy
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
|
||||
<meta name="description" content="アニメーション図解とワンクリック実行コードで学べるデータ構造とアルゴリズムの入門書">
|
||||
<meta name="description" content="アニメーションによる図解とワンクリックで実行できるコードで学ぶ、データ構造とアルゴリズムの入門書">
|
||||
|
||||
|
||||
<meta name="author" content="krahets">
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
|
||||
|
||||
<title>3.3 数値エンコーディング * - Hello アルゴリズム</title>
|
||||
<title>3.3 数値の符号化 * - Hello Algo</title>
|
||||
|
||||
|
||||
|
||||
@@ -113,17 +113,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="banner-svg">
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.-->
|
||||
<path
|
||||
d="M480 32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9L381.7 53c-48 48-113.1 75-181 75H192 160 64c-35.3 0-64 28.7-64 64v96c0 35.3 28.7 64 64 64l0 128c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V352l8.7 0c67.9 0 133 27 181 75l43.6 43.6c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V300.4c18.6-8.8 32-32.5 32-60.4s-13.4-51.6-32-60.4V32zm-64 76.7V240 371.3C357.2 317.8 280.5 288 200.7 288H192V192h8.7c79.8 0 156.5-29.8 215.3-83.3z" />
|
||||
</svg>
|
||||
<span>日本語版のレビュアーを募集しています。詳しくは <a href="/ja/chapter_appendix/contribution/">こちら</a> をご覧ください。</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</aside>
|
||||
@@ -137,9 +126,9 @@
|
||||
|
||||
<header class="md-header md-header--shadow" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="ヘッダー">
|
||||
<a href="../.." title="Hello アルゴリズム" class="md-header__button md-logo" aria-label="Hello アルゴリズム" data-md-component="logo">
|
||||
<a href="../.." title="Hello Algo" class="md-header__button md-logo" aria-label="Hello Algo" data-md-component="logo">
|
||||
|
||||
<img src="../../assets/images/logo.svg" alt="Hello アルゴリズム">
|
||||
<img src="../../assets/images/logo.svg" alt="Hello Algo">
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer" aria-label="ナビゲーション">
|
||||
@@ -150,13 +139,13 @@
|
||||
<div class="md-header__ellipsis">
|
||||
<div class="md-header__topic">
|
||||
<span class="md-ellipsis">
|
||||
Hello アルゴリズム
|
||||
Hello Algo
|
||||
</span>
|
||||
</div>
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
3.3 数値エンコーディング *
|
||||
3.3 数値の符号化 *
|
||||
|
||||
</span>
|
||||
</div>
|
||||
@@ -169,9 +158,9 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="none" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="teal" aria-label="ダークモード" type="radio" name="__palette" id="__palette_0">
|
||||
<input class="md-option" data-md-color-media="none" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="teal" aria-label="ダークモードに切り替える" type="radio" name="__palette" id="__palette_0">
|
||||
|
||||
<label class="md-header__button md-icon" title="ダークモード" for="__palette_1" hidden>
|
||||
<label class="md-header__button md-icon" title="ダークモードに切り替える" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.5 2c-1.79 1.15-3 3.18-3 5.5s1.21 4.35 3.03 5.5C4.46 13 2 10.54 2 7.5A5.5 5.5 0 0 1 7.5 2m11.57 1.5 1.43 1.43L4.93 20.5 3.5 19.07zm-6.18 2.43L11.41 5 9.97 6l.42-1.7L9 3.24l1.75-.12.58-1.65L12 3.1l1.73.03-1.35 1.13zm-3.3 3.61-1.16-.73-1.12.78.34-1.32-1.09-.83 1.36-.09.45-1.29.51 1.27 1.36.03-1.05.87zM19 13.5a5.5 5.5 0 0 1-5.5 5.5c-1.22 0-2.35-.4-3.26-1.07l7.69-7.69c.67.91 1.07 2.04 1.07 3.26m-4.4 6.58 2.77-1.15-.24 3.35zm4.33-2.7 1.15-2.77 2.2 2.54zm1.15-4.96-1.14-2.78 3.34.24zM9.63 18.93l2.77 1.15-2.53 2.19z"/></svg>
|
||||
</label>
|
||||
|
||||
@@ -179,9 +168,9 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="none" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="teal" aria-label="ライトモード" type="radio" name="__palette" id="__palette_1">
|
||||
<input class="md-option" data-md-color-media="none" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="teal" aria-label="ライトモードに切り替える" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
<label class="md-header__button md-icon" title="ライトモード" for="__palette_0" hidden>
|
||||
<label class="md-header__button md-icon" title="ライトモードに切り替える" for="__palette_0" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.5 2c-1.79 1.15-3 3.18-3 5.5s1.21 4.35 3.03 5.5C4.46 13 2 10.54 2 7.5A5.5 5.5 0 0 1 7.5 2m11.57 1.5 1.43 1.43L4.93 20.5 3.5 19.07zm-6.18 2.43L11.41 5 9.97 6l.42-1.7L9 3.24l1.75-.12.58-1.65L12 3.1l1.73.03-1.35 1.13zm-3.3 3.61-1.16-.73-1.12.78.34-1.32-1.09-.83 1.36-.09.45-1.29.51 1.27 1.36.03-1.05.87zM19 13.5a5.5 5.5 0 0 1-5.5 5.5c-1.22 0-2.35-.4-3.26-1.07l7.69-7.69c.67.91 1.07 2.04 1.07 3.26m-4.4 6.58 2.77-1.15-.24 3.35zm4.33-2.7 1.15-2.77 2.2 2.54zm1.15-4.96-1.14-2.78 3.34.24zM9.63 18.93l2.77 1.15-2.53 2.19z"/></svg>
|
||||
</label>
|
||||
|
||||
@@ -295,12 +284,12 @@
|
||||
|
||||
<nav class="md-nav md-nav--primary" aria-label="ナビゲーション" data-md-level="0">
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href="../.." title="Hello アルゴリズム" class="md-nav__button md-logo" aria-label="Hello アルゴリズム" data-md-component="logo">
|
||||
<a href="../.." title="Hello Algo" class="md-nav__button md-logo" aria-label="Hello Algo" data-md-component="logo">
|
||||
|
||||
<img src="../../assets/images/logo.svg" alt="Hello アルゴリズム">
|
||||
<img src="../../assets/images/logo.svg" alt="Hello Algo">
|
||||
|
||||
</a>
|
||||
Hello アルゴリズム
|
||||
Hello Algo
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
@@ -351,7 +340,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
はじめに
|
||||
序文
|
||||
|
||||
|
||||
</span>
|
||||
@@ -367,7 +356,7 @@
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
はじめに
|
||||
序文
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
@@ -421,7 +410,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
第 0 章 前書き
|
||||
第 0 章 はじめに
|
||||
|
||||
|
||||
</span>
|
||||
@@ -442,7 +431,7 @@
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
第 0 章 前書き
|
||||
第 0 章 はじめに
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
@@ -577,7 +566,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
第 1 章 アルゴリズムを知る
|
||||
第 1 章 アルゴリズムとの出会い
|
||||
|
||||
|
||||
</span>
|
||||
@@ -598,7 +587,7 @@
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
第 1 章 アルゴリズムを知る
|
||||
第 1 章 アルゴリズムとの出会い
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
@@ -619,7 +608,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
1.1 アルゴリズムは至るところにある
|
||||
1.1 アルゴリズムはどこにでもある
|
||||
|
||||
|
||||
</span>
|
||||
@@ -739,7 +728,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
第 2 章 計算量解析
|
||||
第 2 章 計算量の解析
|
||||
|
||||
|
||||
</span>
|
||||
@@ -760,7 +749,7 @@
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
|
||||
|
||||
第 2 章 計算量解析
|
||||
第 2 章 計算量の解析
|
||||
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
@@ -781,7 +770,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
2.1 アルゴリズム効率の評価
|
||||
2.1 アルゴリズムの効率の評価
|
||||
|
||||
|
||||
</span>
|
||||
@@ -916,7 +905,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
2.6 演習
|
||||
2.6 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -1089,7 +1078,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
3.3 数値エンコーディング *
|
||||
3.3 数値の符号化 *
|
||||
|
||||
|
||||
</span>
|
||||
@@ -1106,7 +1095,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
3.3 数値エンコーディング *
|
||||
3.3 数値の符号化 *
|
||||
|
||||
|
||||
</span>
|
||||
@@ -1135,7 +1124,7 @@
|
||||
<a href="#331-1-2" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
<span class="md-typeset">
|
||||
3.3.1 符号付き絶対値表現、1 の補数、2 の補数
|
||||
3.3.1 符号絶対値表現、1 の補数表現、2 の補数表現
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
@@ -1146,7 +1135,7 @@
|
||||
<a href="#332" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
<span class="md-typeset">
|
||||
3.3.2 浮動小数点数のエンコーディング
|
||||
3.3.2 浮動小数点数の符号化
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
@@ -1230,7 +1219,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
3.6 演習
|
||||
3.6 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -1473,7 +1462,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
4.6 演習
|
||||
4.6 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -1687,7 +1676,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
5.5 演習
|
||||
5.5 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -1901,7 +1890,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
6.5 演習
|
||||
6.5 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2173,7 +2162,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
7.7 演習
|
||||
7.7 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2306,7 +2295,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
8.2 ヒープ構築
|
||||
8.2 ヒープの構築
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2387,7 +2376,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
8.5 演習
|
||||
8.5 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2601,7 +2590,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
9.5 演習
|
||||
9.5 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2738,7 +2727,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
10.2 二分探索の挿入位置
|
||||
10.2 二分探索で挿入位置を探す
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2765,7 +2754,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
10.3 二分探索の境界
|
||||
10.3 二分探索で境界を探す
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2792,7 +2781,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
10.4 ハッシュによる最適化戦略
|
||||
10.4 ハッシュを使った最適化
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2819,7 +2808,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
10.5 探索アルゴリズム再考
|
||||
10.5 探索アルゴリズムを改めて考える
|
||||
|
||||
|
||||
</span>
|
||||
@@ -2873,7 +2862,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
10.7 演習
|
||||
10.7 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3209,7 +3198,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
11.9 計数ソート
|
||||
11.9 カウントソート
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3290,7 +3279,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
11.12 演習
|
||||
11.12 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3398,7 +3387,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
12.1 分割統治法
|
||||
12.1 分割統治アルゴリズム
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3425,7 +3414,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
12.2 分割統治探索戦略
|
||||
12.2 分割統治による探索戦略
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3533,7 +3522,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
12.6 演習
|
||||
12.6 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3668,7 +3657,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
13.2 全順列問題
|
||||
13.2 順列列挙問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3695,7 +3684,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
13.3 部分和問題
|
||||
13.3 部分集合和問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3776,7 +3765,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
13.6 演習
|
||||
13.6 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3888,7 +3877,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
14.1 動的計画法入門
|
||||
14.1 動的計画法への第一歩
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3915,7 +3904,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
14.2 動的計画法の問題特性
|
||||
14.2 動的計画法の問題の特徴
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3942,7 +3931,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
14.3 動的計画法の問題解決の考え方
|
||||
14.3 動的計画法の解き方
|
||||
|
||||
|
||||
</span>
|
||||
@@ -3996,7 +3985,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
14.5 完全ナップサック問題
|
||||
14.5 個数制限なしナップサック問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -4077,7 +4066,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
14.8 演習
|
||||
14.8 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -4185,7 +4174,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
15.1 貪欲法
|
||||
15.1 貪欲アルゴリズム
|
||||
|
||||
|
||||
</span>
|
||||
@@ -4212,7 +4201,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
15.2 分数ナップサック問題
|
||||
15.2 分割可能ナップサック問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -4266,7 +4255,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
15.4 最大積分割問題
|
||||
15.4 整数を分割して積を最大にする問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -4320,7 +4309,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
15.6 演習
|
||||
15.6 練習問題
|
||||
|
||||
|
||||
</span>
|
||||
@@ -4449,7 +4438,7 @@
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
16.2 一緒に制作に参加しましょう
|
||||
16.2 一緒に本書を作りましょう
|
||||
|
||||
|
||||
</span>
|
||||
@@ -4604,7 +4593,7 @@
|
||||
<a href="#331-1-2" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
<span class="md-typeset">
|
||||
3.3.1 符号付き絶対値表現、1 の補数、2 の補数
|
||||
3.3.1 符号絶対値表現、1 の補数表現、2 の補数表現
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
@@ -4615,7 +4604,7 @@
|
||||
<a href="#332" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
<span class="md-typeset">
|
||||
3.3.2 浮動小数点数のエンコーディング
|
||||
3.3.2 浮動小数点数の符号化
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
@@ -4659,24 +4648,24 @@
|
||||
|
||||
|
||||
<!-- Page content -->
|
||||
<h1 id="33">3.3 数値エンコーディング *<a class="headerlink" href="#33" title="Permanent link">¶</a></h1>
|
||||
<h1 id="33">3.3 数値の符号化 *<a class="headerlink" href="#33" title="この見出しへのリンク">¶</a></h1>
|
||||
<div class="admonition tip">
|
||||
<p class="admonition-title">Tip</p>
|
||||
<p>本書では、タイトルに * 記号が付いている章は選読です。時間が限られている場合や理解が難しいと感じる場合は、いったん読み飛ばし、必読章を終えてから個別に取り組んでください。</p>
|
||||
<p class="admonition-title">ヒント</p>
|
||||
<p>本書で見出しに * が付く節は、任意の学習内容です。時間が足りない場合や難しく感じる場合は、ひとまず飛ばし、必読の節を学んだ後で取り組んでかまいません。</p>
|
||||
</div>
|
||||
<h2 id="331-1-2">3.3.1 符号付き絶対値表現、1 の補数、2 の補数<a class="headerlink" href="#331-1-2" title="Permanent link">¶</a></h2>
|
||||
<p>前節の表を見ると、すべての整数型で表せる負数の個数は正数より 1 つ多く、たとえば <code>byte</code> の値域は <span class="arithmatex">\([-128, 127]\)</span> です。この現象は直感に反するように見えますが、その背景には符号付き絶対値表現、1 の補数、2 の補数に関する知識があります。</p>
|
||||
<p>まず押さえておくべきなのは、<strong>数値はコンピュータ内で「2 の補数」の形で保存される</strong>ということです。その理由を説明する前に、まずはこの 3 つの定義を示します。</p>
|
||||
<h2 id="331-1-2">3.3.1 符号絶対値表現、1 の補数表現、2 の補数表現<a class="headerlink" href="#331-1-2" title="この見出しへのリンク">¶</a></h2>
|
||||
<p>前の節の表では、どの整数型も、表せる負の数が正の数より一つ多くなっていました。たとえば <code>byte</code> の範囲は <span class="arithmatex">\([-128, 127]\)</span> です。直感に反するこの性質には、符号絶対値表現、1 の補数表現、2 の補数表現が関わります。</p>
|
||||
<p>まず、<strong>数値はコンピュータ内で「2 の補数表現」により保存される</strong>ことを押さえましょう。理由を考える前に、三つを定義します。</p>
|
||||
<ul>
|
||||
<li><strong>符号付き絶対値表現</strong>:数値の二進表現の最上位ビットを符号ビットとみなし、<span class="arithmatex">\(0\)</span> は正数、<span class="arithmatex">\(1\)</span> は負数を表し、残りのビットが数値の値を表します。</li>
|
||||
<li><strong>1 の補数</strong>:正数の 1 の補数は符号付き絶対値表現と同じで、負数の 1 の補数は符号ビットを除くすべてのビットを反転したものです。</li>
|
||||
<li><strong>2 の補数</strong>:正数の 2 の補数は符号付き絶対値表現と同じで、負数の 2 の補数は 1 の補数に <span class="arithmatex">\(1\)</span> を加えたものです。</li>
|
||||
<li><strong>符号絶対値表現</strong>:二進表現の最上位ビットを符号とし、<span class="arithmatex">\(0\)</span> を正、<span class="arithmatex">\(1\)</span> を負とします。残りのビットで数の値を表します。</li>
|
||||
<li><strong>1 の補数表現</strong>:正の数は符号絶対値表現と同じです。負の数は、符号絶対値表現の符号ビット以外をすべて反転します。</li>
|
||||
<li><strong>2 の補数表現</strong>:正の数は符号絶対値表現と同じです。負の数は、1 の補数表現に <span class="arithmatex">\(1\)</span> を加えます。</li>
|
||||
</ul>
|
||||
<p>下図は、符号付き絶対値表現、1 の補数、2 の補数の変換方法を示しています。</p>
|
||||
<p><img alt="符号付き絶対値表現、1 の補数、2 の補数の相互変換" class="animation-figure" src="../number_encoding.assets/1s_2s_complement.png" /></p>
|
||||
<p align="center"> 図 3-4 符号付き絶対値表現、1 の補数、2 の補数の相互変換 </p>
|
||||
<p>図 3-4 に、三つの表現の変換方法を示します。</p>
|
||||
<p><img alt="符号絶対値表現、1 の補数表現、2 の補数表現の相互変換" class="animation-figure" src="../number_encoding.assets/1s_2s_complement.png" /></p>
|
||||
<p align="center"> 図 3-4 符号絶対値表現、1 の補数表現、2 の補数表現の相互変換 </p>
|
||||
|
||||
<p><u>符号付き絶対値表現(sign-magnitude)</u>は最も直感的ですが、いくつかの制約があります。まず、<strong>負数の符号付き絶対値表現はそのまま演算に使えません</strong>。たとえば符号付き絶対値表現で <span class="arithmatex">\(1 + (-2)\)</span> を計算すると、結果は <span class="arithmatex">\(-3\)</span> になってしまい、これは明らかに誤りです。</p>
|
||||
<p><u>符号絶対値表現(sign-magnitude)</u>は最も直感的ですが、制約があります。一つは、<strong>負の数をそのまま演算に使えないこと</strong>です。たとえば <span class="arithmatex">\(1 + (-2)\)</span> をこの表現で計算すると、明らかに誤った結果 <span class="arithmatex">\(-3\)</span> になります。</p>
|
||||
<div class="arithmatex">\[
|
||||
\begin{aligned}
|
||||
& 1 + (-2) \newline
|
||||
@@ -4685,86 +4674,86 @@
|
||||
& \rightarrow -3
|
||||
\end{aligned}
|
||||
\]</div>
|
||||
<p>この問題を解決するために、コンピュータには<u>1 の補数(1's complement)</u>が導入されました。まず符号付き絶対値表現を 1 の補数に変換し、1 の補数で <span class="arithmatex">\(1 + (-2)\)</span> を計算してから、結果を 1 の補数から符号付き絶対値表現へ戻すと、正しい結果 <span class="arithmatex">\(-1\)</span> が得られます。</p>
|
||||
<p>この問題を解決するため、<u>1 の補数表現(1's complement)</u>が導入されました。符号絶対値表現から変換して <span class="arithmatex">\(1 + (-2)\)</span> を計算し、結果を元の表現へ戻すと、正しい答え <span class="arithmatex">\(-1\)</span> が得られます。</p>
|
||||
<div class="arithmatex">\[
|
||||
\begin{aligned}
|
||||
& 1 + (-2) \newline
|
||||
& \rightarrow 0000 \; 0001 \; \text{(符号付き絶対値表現)} + 1000 \; 0010 \; \text{(符号付き絶対値表現)} \newline
|
||||
& \rightarrow 0000 \; 0001 \; \text{(符号絶対値)} + 1000 \; 0010 \; \text{(符号絶対値)} \newline
|
||||
& = 0000 \; 0001 \; \text{(1 の補数)} + 1111 \; 1101 \; \text{(1 の補数)} \newline
|
||||
& = 1111 \; 1110 \; \text{(1 の補数)} \newline
|
||||
& = 1000 \; 0001 \; \text{(符号付き絶対値表現)} \newline
|
||||
& = 1000 \; 0001 \; \text{(符号絶対値)} \newline
|
||||
& \rightarrow -1
|
||||
\end{aligned}
|
||||
\]</div>
|
||||
<p>一方、<strong>数値 0 の符号付き絶対値表現には <span class="arithmatex">\(+0\)</span> と <span class="arithmatex">\(-0\)</span> の 2 つの表し方があります</strong>。つまり、数値 0 に対して異なる 2 つの二進コードが対応しており、これは曖昧さの原因になります。たとえば条件判定で正のゼロと負のゼロを区別しないと、誤った判定結果になる可能性があります。また、この曖昧さを解消しようとすると追加の判定処理が必要になり、計算効率が下がるおそれがあります。</p>
|
||||
<p>もう一つは、<strong>ゼロの符号絶対値表現が <span class="arithmatex">\(+0\)</span> と <span class="arithmatex">\(-0\)</span> の二つあること</strong>です。ゼロに異なる二進符号が対応すると、曖昧さが生じる可能性があります。たとえば条件判定で正負のゼロを適切に区別しなければ、誤った結果になるかもしれません。この曖昧さに対応するには追加の判定が必要で、演算効率を下げる可能性があります。</p>
|
||||
<div class="arithmatex">\[
|
||||
\begin{aligned}
|
||||
+0 & \rightarrow 0000 \; 0000 \newline
|
||||
-0 & \rightarrow 1000 \; 0000
|
||||
\end{aligned}
|
||||
\]</div>
|
||||
<p>符号付き絶対値表現と同様に、1 の補数にも正負のゼロの曖昧さがあります。そこでコンピュータはさらに<u>2 の補数(2's complement)</u>を導入しました。まずは負のゼロについて、符号付き絶対値表現、1 の補数、2 の補数の変換を見てみましょう。</p>
|
||||
<p>1 の補数表現にも正負のゼロの問題があるため、さらに<u>2 の補数表現(2's complement)</u>が導入されました。まず、負のゼロの変換を見てみましょう。</p>
|
||||
<div class="arithmatex">\[
|
||||
\begin{aligned}
|
||||
-0 \rightarrow \; & 1000 \; 0000 \; \text{(符号付き絶対値表現)} \newline
|
||||
-0 \rightarrow \; & 1000 \; 0000 \; \text{(符号絶対値)} \newline
|
||||
= \; & 1111 \; 1111 \; \text{(1 の補数)} \newline
|
||||
= 1 \; & 0000 \; 0000 \; \text{(2 の補数)} \newline
|
||||
\end{aligned}
|
||||
\]</div>
|
||||
<p>負のゼロの 1 の補数に <span class="arithmatex">\(1\)</span> を加えると桁上がりが発生しますが、<code>byte</code> 型の長さは 8 ビットしかないため、第 9 ビットへあふれた <span class="arithmatex">\(1\)</span> は捨てられます。つまり、<strong>負のゼロの 2 の補数は <span class="arithmatex">\(0000 \; 0000\)</span> であり、正のゼロの 2 の補数と同じです</strong>。そのため、2 の補数表現ではゼロは 1 つしか存在せず、正負のゼロの曖昧さは解消されます。</p>
|
||||
<p>最後にもう 1 つ疑問が残ります。<code>byte</code> 型の値域は <span class="arithmatex">\([-128, 127]\)</span> ですが、余分にある負数 <span class="arithmatex">\(-128\)</span> はどのように得られるのでしょうか。区間 <span class="arithmatex">\([-127, +127]\)</span> にあるすべての整数には、それぞれ対応する符号付き絶対値表現、1 の補数、2 の補数があり、符号付き絶対値表現と 2 の補数の間は相互に変換できます。</p>
|
||||
<p>しかし、<strong>2 の補数 <span class="arithmatex">\(1000 \; 0000\)</span> だけは例外で、対応する符号付き絶対値表現を持ちません</strong>。変換規則に従うと、この 2 の補数に対応する符号付き絶対値表現は <span class="arithmatex">\(0000 \; 0000\)</span> になります。これは明らかに矛盾しています。なぜなら、この符号付き絶対値表現は数値 <span class="arithmatex">\(0\)</span> を表し、その 2 の補数は自分自身であるはずだからです。コンピュータでは、この特別な 2 の補数 <span class="arithmatex">\(1000 \; 0000\)</span> を <span class="arithmatex">\(-128\)</span> と定めています。実際、2 の補数での <span class="arithmatex">\((-1) + (-127)\)</span> の計算結果はちょうど <span class="arithmatex">\(-128\)</span> になります。</p>
|
||||
<p>負のゼロの 1 の補数に <span class="arithmatex">\(1\)</span> を加えると桁上がりしますが、<code>byte</code> は 8 ビットなので、9 ビット目にはみ出た <span class="arithmatex">\(1\)</span> は捨てられます。つまり、<strong>負のゼロの 2 の補数は <span class="arithmatex">\(0000 \; 0000\)</span> で、正のゼロと同じです</strong>。ゼロの表現が一つになり、曖昧さが解消されます。</p>
|
||||
<p>最後に、<code>byte</code> の範囲 <span class="arithmatex">\([-128, 127]\)</span> で、一つ余分な負の数 <span class="arithmatex">\(-128\)</span> がどこから来るのかを考えます。<span class="arithmatex">\([-127, +127]\)</span> の整数には、符号絶対値表現、1 の補数表現、2 の補数表現があり、符号絶対値表現と 2 の補数表現は相互変換できます。</p>
|
||||
<p>ただし、<strong>2 の補数 <span class="arithmatex">\(1000 \; 0000\)</span> は例外で、対応する符号絶対値表現がありません</strong>。変換手順に従うと <span class="arithmatex">\(0000 \; 0000\)</span> になりますが、これは数値 <span class="arithmatex">\(0\)</span> で、その 2 の補数表現は自身であるはずなので矛盾します。この特殊な <span class="arithmatex">\(1000 \; 0000\)</span> は、<span class="arithmatex">\(-128\)</span> を表すと定められています。実際、2 の補数で <span class="arithmatex">\((-1) + (-127)\)</span> を計算すると <span class="arithmatex">\(-128\)</span> になります。</p>
|
||||
<div class="arithmatex">\[
|
||||
\begin{aligned}
|
||||
& (-127) + (-1) \newline
|
||||
& \rightarrow 1111 \; 1111 \; \text{(符号付き絶対値表現)} + 1000 \; 0001 \; \text{(符号付き絶対値表現)} \newline
|
||||
& \rightarrow 1111 \; 1111 \; \text{(符号絶対値)} + 1000 \; 0001 \; \text{(符号絶対値)} \newline
|
||||
& = 1000 \; 0000 \; \text{(1 の補数)} + 1111 \; 1110 \; \text{(1 の補数)} \newline
|
||||
& = 1000 \; 0001 \; \text{(2 の補数)} + 1111 \; 1111 \; \text{(2 の補数)} \newline
|
||||
& = 1000 \; 0000 \; \text{(2 の補数)} \newline
|
||||
& \rightarrow -128
|
||||
\end{aligned}
|
||||
\]</div>
|
||||
<p>すでにお気づきかもしれませんが、上の計算はすべて加算です。これは重要な事実を示しています。<strong>コンピュータ内部のハードウェア回路は、主として加算を基準に設計されている</strong>のです。なぜなら、加算はほかの演算(乗算、除算、減算など)に比べてハードウェアで実装しやすく、並列化もしやすく、演算速度も速いからです。</p>
|
||||
<p>ただし、これはコンピュータが加算しかできないという意味ではありません。<strong>加算といくつかの基本的な論理演算を組み合わせることで、コンピュータはさまざまな数学演算を実現できます</strong>。たとえば減算 <span class="arithmatex">\(a - b\)</span> は加算 <span class="arithmatex">\(a + (-b)\)</span> に変換できますし、乗算や除算も繰り返しの加算または減算に変換できます。</p>
|
||||
<p>これで、コンピュータが 2 の補数を使う理由をまとめられます。2 の補数表現に基づけば、コンピュータは同じ回路と操作で正数と負数の加算を扱うことができ、減算専用の特別なハードウェア回路を設計する必要がなく、正負のゼロの曖昧さも特別に処理しなくて済みます。これにより、ハードウェア設計は大幅に簡略化され、演算効率も向上します。</p>
|
||||
<p>2 の補数の設計は非常に巧妙ですが、紙幅の都合上ここまでにします。興味のある読者は、さらに深く調べてみてください。</p>
|
||||
<h2 id="332">3.3.2 浮動小数点数のエンコーディング<a class="headerlink" href="#332" title="Permanent link">¶</a></h2>
|
||||
<p>注意深い人なら気づくかもしれません。<code>int</code> と <code>float</code> はどちらも長さが 4 バイトで同じなのに、なぜ <code>float</code> の値域は <code>int</code> よりはるかに広いのでしょうか。これはかなり直感に反します。というのも、<code>float</code> は小数を表す必要があるので、本来なら値域は狭くなるはずだからです。</p>
|
||||
<p>実際には、<strong>これは浮動小数点数 <code>float</code> が異なる表現方法を採用しているためです</strong>。32 ビット長の二進数を次のように表します。</p>
|
||||
<p>ここまでの計算がすべて加算であることに気づいたかもしれません。これは重要な事実、<strong>コンピュータ内部の回路は主に加算を基礎に設計されていること</strong>を示しています。加算は乗算・除算・減算などに比べて回路を実装しやすく、並列化も容易で、演算速度が速いためです。</p>
|
||||
<p>もちろん、加算しかできないという意味ではありません。<strong>加算と基本的な論理演算を組み合わせれば、さまざまな数学的演算を実現できます</strong>。たとえば減算 <span class="arithmatex">\(a - b\)</span> は加算 <span class="arithmatex">\(a + (-b)\)</span> に置き換えられ、乗算と除算も、複数回の加算や減算に変換できます。</p>
|
||||
<p>2 の補数を使う理由は、正負の加算を同じ回路と操作で処理でき、減算専用の回路や正負のゼロへの特別な処理が不要になるためです。これにより、回路設計が大幅に簡単になり、演算効率が高まります。</p>
|
||||
<p>2 の補数の設計は巧妙ですが、紙幅の都合上、ここまでにします。興味があれば、さらに詳しく調べてみてください。</p>
|
||||
<h2 id="332">3.3.2 浮動小数点数の符号化<a class="headerlink" href="#332" title="この見出しへのリンク">¶</a></h2>
|
||||
<p><code>int</code> と <code>float</code> はどちらも 4 バイトなのに、なぜ <code>float</code> の方がはるかに広い範囲を表せるのでしょうか。小数も表すなら範囲が狭くなりそうなので、直感に反します。</p>
|
||||
<p>実際には、<strong><code>float</code> が別の表現方法を使っているためです</strong>。32 ビットの二進数を次のように表します。</p>
|
||||
<div class="arithmatex">\[
|
||||
b_{31} b_{30} b_{29} \ldots b_2 b_1 b_0
|
||||
\]</div>
|
||||
<p>IEEE 754 標準によれば、32-bit 長の <code>float</code> は次の 3 つの部分から構成されます。</p>
|
||||
<p>IEEE 754 規格によれば、32-bit の <code>float</code> は三つの部分からなります。</p>
|
||||
<ul>
|
||||
<li>符号部 <span class="arithmatex">\(\mathrm{S}\)</span> :1 ビットを占め、<span class="arithmatex">\(b_{31}\)</span> に対応します。</li>
|
||||
<li>指数部 <span class="arithmatex">\(\mathrm{E}\)</span> :8 ビットを占め、<span class="arithmatex">\(b_{30} b_{29} \ldots b_{23}\)</span> に対応します。</li>
|
||||
<li>仮数部 <span class="arithmatex">\(\mathrm{N}\)</span> :23 ビットを占め、<span class="arithmatex">\(b_{22} b_{21} \ldots b_0\)</span> に対応します。</li>
|
||||
<li>符号部 <span class="arithmatex">\(\mathrm{S}\)</span>:1 ビットで、<span class="arithmatex">\(b_{31}\)</span> に対応します。</li>
|
||||
<li>指数部 <span class="arithmatex">\(\mathrm{E}\)</span>:8 ビットで、<span class="arithmatex">\(b_{30} b_{29} \ldots b_{23}\)</span> に対応します。</li>
|
||||
<li>仮数部 <span class="arithmatex">\(\mathrm{N}\)</span>:23 ビットで、<span class="arithmatex">\(b_{22} b_{21} \ldots b_0\)</span> に対応します。</li>
|
||||
</ul>
|
||||
<p>二進数 <code>float</code> に対応する値は次式で計算されます。</p>
|
||||
<p>二進数で表した <code>float</code> の値は、次の式で計算します。</p>
|
||||
<div class="arithmatex">\[
|
||||
\text {val} = (-1)^{b_{31}} \times 2^{\left(b_{30} b_{29} \ldots b_{23}\right)_2-127} \times\left(1 . b_{22} b_{21} \ldots b_0\right)_2
|
||||
\]</div>
|
||||
<p>十進数に直すと、計算式は次のようになります。</p>
|
||||
<p>十進数の式に直すと、次のようになります。</p>
|
||||
<div class="arithmatex">\[
|
||||
\text {val}=(-1)^{\mathrm{S}} \times 2^{\mathrm{E} -127} \times (1 + \mathrm{N})
|
||||
\]</div>
|
||||
<p>各項の取り得る範囲は次のとおりです。</p>
|
||||
<p>各項の範囲は次のとおりです。</p>
|
||||
<div class="arithmatex">\[
|
||||
\begin{aligned}
|
||||
\mathrm{S} \in & \{ 0, 1\}, \quad \mathrm{E} \in \{ 1, 2, \dots, 254 \} \newline
|
||||
(1 + \mathrm{N}) = & (1 + \sum_{i=1}^{23} b_{23-i} 2^{-i}) \subset [1, 2 - 2^{-23}]
|
||||
\end{aligned}
|
||||
\]</div>
|
||||
<p><img alt="IEEE 754 標準における float の計算例" class="animation-figure" src="../number_encoding.assets/ieee_754_float.png" /></p>
|
||||
<p align="center"> 図 3-5 IEEE 754 標準における float の計算例 </p>
|
||||
<p><img alt="IEEE 754 に従った float の計算例" class="animation-figure" src="../number_encoding.assets/ieee_754_float.png" /></p>
|
||||
<p align="center"> 図 3-5 IEEE 754 に従った float の計算例 </p>
|
||||
|
||||
<p>上図を見ると、例として <span class="arithmatex">\(\mathrm{S} = 0\)</span> 、 <span class="arithmatex">\(\mathrm{E} = 124\)</span> 、<span class="arithmatex">\(\mathrm{N} = 2^{-2} + 2^{-3} = 0.375\)</span> が与えられた場合、次のようになります。</p>
|
||||
<p>図 3-5 の例では、<span class="arithmatex">\(\mathrm{S} = 0\)</span>、<span class="arithmatex">\(\mathrm{E} = 124\)</span>、<span class="arithmatex">\(\mathrm{N} = 2^{-2} + 2^{-3} = 0.375\)</span> なので、次の値になります。</p>
|
||||
<div class="arithmatex">\[
|
||||
\text { val } = (-1)^0 \times 2^{124 - 127} \times (1 + 0.375) = 0.171875
|
||||
\]</div>
|
||||
<p>これで最初の疑問に答えられます。<strong><code>float</code> の表現方法には指数部が含まれているため、その値域は <code>int</code> よりはるかに広い</strong>のです。上の計算より、<code>float</code> が表せる最大の正数は <span class="arithmatex">\(2^{254 - 127} \times (2 - 2^{-23}) \approx 3.4 \times 10^{38}\)</span> であり、符号ビットを切り替えれば最小の負数が得られます。</p>
|
||||
<p><strong>浮動小数点数 <code>float</code> は値域を広げる一方で、その代償として精度を犠牲にしています</strong>。整数型 <code>int</code> は 32 ビットすべてを数値の表現に使うため、数値は一様に分布します。しかし指数部があるため、浮動小数点数 <code>float</code> は値が大きくなるほど、隣り合う 2 つの数の差も大きくなる傾向があります。</p>
|
||||
<p>次の表のとおり、指数部 <span class="arithmatex">\(\mathrm{E} = 0\)</span> と <span class="arithmatex">\(\mathrm{E} = 255\)</span> には特別な意味があり、<strong>ゼロ、無限大、<span class="arithmatex">\(\mathrm{NaN}\)</span> などを表すために使われます</strong>。</p>
|
||||
<p>これで最初の疑問に答えられます。<strong><code>float</code> には指数部があるため、<code>int</code> よりはるかに広い範囲を表せるのです</strong>。上の計算から、最大の正の数は <span class="arithmatex">\(2^{254 - 127} \times (2 - 2^{-23}) \approx 3.4 \times 10^{38}\)</span> となり、符号を変えると最小の負の数になります。</p>
|
||||
<p><strong><code>float</code> は範囲を広げる代わりに、精度を犠牲にしています</strong>。<code>int</code> は 32 ビット全体で数を表し、値は等間隔に分布します。一方、<code>float</code> は指数部があるため、数値が大きいほど、隣り合う表現可能な数の間隔も大きくなる傾向があります。</p>
|
||||
<p>表 3-2 のように、指数部 <span class="arithmatex">\(\mathrm{E} = 0\)</span> と <span class="arithmatex">\(\mathrm{E} = 255\)</span> は特殊な意味を持ち、<strong>ゼロ、無限大、<span class="arithmatex">\(\mathrm{NaN}\)</span> などを表すために使います</strong>。</p>
|
||||
<p align="center"> 表 3-2 指数部の意味 </p>
|
||||
|
||||
<div class="center-table">
|
||||
@@ -4799,8 +4788,8 @@ b_{31} b_{30} b_{29} \ldots b_2 b_1 b_0
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p>なお、非正規化数によって浮動小数点数の精度は大きく向上します。最小の正の正規化数は <span class="arithmatex">\(2^{-126}\)</span> であり、最小の正の非正規化数は <span class="arithmatex">\(2^{-126} \times 2^{-23}\)</span> です。</p>
|
||||
<p>倍精度 <code>double</code> も <code>float</code> と同様の表現方法を採用しているため、ここでは詳述しません。</p>
|
||||
<p>非正規化数は、浮動小数点数の精度を大きく改善します。最小の正の正規化数は <span class="arithmatex">\(2^{-126}\)</span>、最小の正の非正規化数は <span class="arithmatex">\(2^{-126} \times 2^{-23}\)</span> です。</p>
|
||||
<p>倍精度の <code>double</code> も <code>float</code> に似た方法で表現するため、ここでは説明を省きます。</p>
|
||||
|
||||
<!-- Source file information -->
|
||||
|
||||
@@ -4823,7 +4812,7 @@ aria-label="フッター"
|
||||
<a
|
||||
href="../basic_data_types/"
|
||||
class="md-footer__link md-footer__link--prev"
|
||||
aria-label="前: 3.2 &nbsp; 基本データ型"
|
||||
aria-label="前: 3.2 基本データ型"
|
||||
rel="prev"
|
||||
>
|
||||
<div class="md-footer__button md-icon">
|
||||
@@ -4847,7 +4836,7 @@ aria-label="フッター"
|
||||
<a
|
||||
href="../character_encoding/"
|
||||
class="md-footer__link md-footer__link--next"
|
||||
aria-label="次: 3.4 &nbsp; 文字エンコーディング *"
|
||||
aria-label="次: 3.4 文字エンコーディング *"
|
||||
rel="next"
|
||||
>
|
||||
<div class="md-footer__title">
|
||||
@@ -4869,14 +4858,10 @@ aria-label="フッター"
|
||||
<!-- Comment system -->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- Check-in button above comments -->
|
||||
|
||||
|
||||
<h5 align="center" id="__comments">ご意見、ご質問、ご提案があればぜひコメントしてください</h5>
|
||||
<h5 align="center" id="__comments">コメント欄で、考えや質問、ご提案をお寄せください。</h5>
|
||||
|
||||
<!-- Insert generated snippet here -->
|
||||
<script
|
||||
@@ -4909,7 +4894,20 @@ aria-label="フッター"
|
||||
/* Set palette on initial load */
|
||||
giscus.setAttribute("data-theme", getGiscusTheme())
|
||||
|
||||
|
||||
/* The Giscus client creates the iframe asynchronously with an English title. */
|
||||
;(function() {
|
||||
function labelCommentsFrame() {
|
||||
var frame = document.querySelector("iframe.giscus-frame")
|
||||
if (!frame) return false
|
||||
frame.setAttribute("title", "コメント")
|
||||
return true
|
||||
}
|
||||
if (labelCommentsFrame()) return
|
||||
var observer = new MutationObserver(function() {
|
||||
if (labelCommentsFrame()) observer.disconnect()
|
||||
})
|
||||
observer.observe(giscus.parentElement, { childList: true, subtree: true })
|
||||
})()
|
||||
|
||||
/* Register event handlers after documented loaded */
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
@@ -4948,7 +4946,7 @@ aria-label="フッター"
|
||||
<div class="md-copyright">
|
||||
|
||||
<div class="md-copyright__highlight">
|
||||
Copyright © 2026 krahets<br>The website content is licensed under <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a>
|
||||
Copyright © 2026 krahets<br>このサイトのコンテンツのライセンス: <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -5008,7 +5006,7 @@ aria-label="フッター"
|
||||
<script id="__config" type="application/json">{"annotate":null,"base":"../../","features":["content.action.edit","content.code.annotate","content.code.copy","content.tabs.link","content.tooltips","navigation.indexes","navigation.tracking","search.highlight","search.share","search.suggest","toc.follow"],"search":"../../assets/javascripts/workers/search.b6b7e04f.min.js","tags":null,"translations":{"clipboard.copied":"コピーしました","clipboard.copy":"クリップボードへコピー","search.result.more.one":"このページ内にもう1件見つかりました","search.result.more.other":"このページ内にあと#件見つかりました","search.result.none":"何も見つかりませんでした","search.result.one":"1件見つかりました","search.result.other":"#件見つかりました","search.result.placeholder":"検索キーワードを入力してください","search.result.term.missing":"検索に含まれない","select.version":"バージョン切り替え"},"version":null}</script>
|
||||
|
||||
|
||||
<script src="../../assets/javascripts/bundle.e559d5b757c25f1f23bd887b700c56e3018b129d471c011292faeb47b8b74ce4.min.js"></script>
|
||||
<script src="../../assets/javascripts/bundle.bbe737eb31084dfc2f0d91a916c44a189920caa85eb843c038b80c96c32c779e.min.js"></script>
|
||||
|
||||
<script src="../../javascripts/mathjax.js"></script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user