ticoAg/ChineseCorpus-Kaggle-fanti huggingface dataset:
*每個生命骰的投擲（但體質減值永遠不能使結果低于1—也就是說，人物在升級時至少能獲得一點HP）。
*強韌豁免檢定，用于抵抗毒素及類似的威脅。
*專注檢定。專注是個對施法者很重要的技能，以體質為關鍵屬性。如果人物的體質值的改變足以使其體質修正發生變化，其生命值也相應的增加或減少。
智力決定了人物學習和推理的能力。這項屬性對法師非常重要，因為它決定了法師所能施放的法術數量，抵抗他們施放法術的難度，以及法術的威力。同時智力對任何想擁有多種技能的人物都很重要。
人物的智力調整值將用于：
*游戲開始時所掌握的語言數目。
*每等級獲得的技能點數。（但人物每級至少能獲得1點技能點。）
*估價、手藝、文書解讀、解除裝置、偽造文書、知識、搜索以及法術辨識檢定。這些技能以智力作為關鍵屬性。法師由高智力值得到施法次數獎勵。施放一個法師法術所需要的最低智力值是10+法術等級。動物的智力值為1或者2。類人生物至少為3。
感知表現了人物的意志力、常識判斷力、感知力和直覺。智力表現人物分析信息的能力，而知覺更多的表現在對周圍事物的察覺和了解上。感知是牧師和德魯依最重要的屬性，對圣武士和巡林客也很重要。如果玩家希望自己的人物有敏銳的直覺，可以給人物高的感知屬性。任何生物都有感知。
人物的感知調整值將用于：
*意志豁免檢定（用于對抗魅惑人類之類的法術）
*醫療、聆聽、專業、察言觀色、偵察和求生。這些技能以感知作為關鍵屬性。
牧師、德魯伊、圣武士、巡林客由高感知值得到施法次數獎勵。施放一個牧師、德魯依、圣武士、巡林客法術所需要的最低感知值是10+法術等級。
魅力表示人物的魄力、說服力、個人吸引力、領導能力和身體的自然魅力。這項屬性對圣武士、術士和吟游詩人最重要。它對牧師也很重要，因為它影響著牧師驅退不死生物的能力。任何生物都有魅力。
人物的魅力調整值將用于：
*唬騙、交涉、易容、收集信息、馴養動物、威嚇、表演和使用魔法裝置檢定。這些技能以魅力作為關鍵屬性。
*牧師和圣武士的驅散檢定，用來驅散僵尸、吸血鬼及其他不死生物。
術士或吟游詩人由高魅力值得到施法次數獎勵。施放一個術士或詩人法術所需要的最低魅力值是10+法術等級。
陣營代表生物的道德看法和價值觀。陣營是可變的，隨著遊戲進行玩家的行為可能會導致角色陣營轉變。
四版時將陣營減到了五個：守序善良，善良，無陣營，邪惡和混亂邪惡。五版又回復成九大陣營，並將無法做出理性思考、分辨道德和倫理選擇的生物歸類成無陣營。
在部份版本中陣營和職業必須相符，例如聖武士必須保持守序善良，武僧為守序，德魯伊為中立，野蠻人和吟遊詩人屬於混亂陣營。若是陣營改變有可能會導致角色喪失職業特殊能力。
龍與地下城使用的魔法系統稱為萬西安（Vancian Casting），特色為「施展後即忘記（fire and forget）」。玩家必須事先記錄角色當天記憶了哪些法術，一旦施展後，該法術即從角色的記憶中抹除，除非事前準備另一道相同的法術，否則無法再度施展。這種系統是源自於科幻小說家傑克?萬斯（Jack Vance）的小說瀕死的地球。四版一度取消萬西安，改將全職業特殊能力統一，稱為威能（Power）系統。但五版時又回歸類似萬西安的施法機制。
遊戲中的法術分成九種類別，除了通用系（universal）以外有八種，通稱為八大學派，分別是：
*防護系（Abjurations）
*咒法系（Conjuration）
*預言系（Divination）
*附魔系（Enchantment）
*塑能系（Evocation）
*死靈系（Necromancy）
*變化系（Transmutation）
收錄於《怪獸圖鑑》、《怪獸圖鑑2》中。
「龍與地下城」使用多面體的骰子解決隨機事件的問題。由左至右：四、六、八、十二、二十及兩個十面體的骰子。最右側的又叫作百分骰
模組（modules）是指預設的冒險劇本，提供給DM當作進行遊戲的範本與參考，市面上販售的模組通常會有背景故事、插圖、地圖，並設定好讓玩家去達成的目標。最早的模組是1975年黑沼（Blackmoor）擴充資料書中附的青蛙神殿（Temple of the Frog）。最早獨立出版的模組則是1978年由TSR發行的對抗巨人（Against the Giants）。
戰役設定（campaign settings）在龍與地下城中代表玩家們冒險的世界背景，當中包含許多不同的奇幻子類別，以劍與魔法為大宗，下列為歷年來較受歡迎的戰役設定：
* 被遺忘的國度（Forgotten Realms）
* 龍槍（Dragonlance）
* 異度風景（Planescape）
* 浩劫殘陽（Darksun）
* 魔域傳奇（Ravenloft）
* 天賦神權（Birthright）
除了官方推出的戰役設定外，DM亦可以發揮想像力自行創作世界背景，當作遊戲進行的舞臺。
開放遊戲授權條款（Open Game License，OGL）是一種授權條款，讓桌上角色扮演遊戲的製作人可以在授權架構下修改、複製、重新發佈遊戲的部份內容，例如遊戲機制的部份。威世智於2000年在雷恩?丹西（Ryan Dancey）主導下將龍與地下城第三版整理成系統參閱文件（System Reference Document，SRD），並將三版主架構d20系統以OGL的型式開放。這讓其他出版公司可以透過OGL出版諸如冒險模組、設定集，甚至是以d20為基底的新遊戲系統。
例如探索者角色扮演遊戲、城堡與聖戰（Castles & Crusades）、Fantasy Craft、Mutants & Masterminds、Arcana Evolved、13th Age等，都是OGL開放下的產物。
2008年威世智在發售龍與地下城四版時另外推出遊戲系統授權條款（Game System License，GSL），讓其他公司可以發行與四版相容的產品。相較於OGL，GSL的限制較多，且與OGL並不相容。
由於OGL出現，市場上一度呈現百家爭鳴的局面，也讓龍與地下城一直以來的銷量霸主地位遭受挑戰。
龍與地下城在40年的發展中版本經過數次更替，其主要的版本歷史如下：
*龍與地下城，初版（Dungeons & Dragons），TSR公司出版（1974年）
初版后龍與地下城規則書開始分為兩個系列：
基本版龍與地下城（Dungeons & Dragons Basic Set，又名Basic Dungeons & Dragons或Classic Dungeons & Dragons）
*基本龍與地下城第一版（Dungeons & Dragons Basic Set 1st Version）（1977年）
*基本龍與地下城第二版（Dungeons & Dragons Basic Set 2nd Version）（1981年）
*基本龍與地下城第三版（Dungeons & Dragons Basic Set 3rd Version）（1983年—1986年）
*基本龍與地下城規則全書（Dungeons & Dragons Basic Set Rules Cyclopedia）（1991年）
進階版龍與地下城（Advanced Dungeons & Dragons）
*進階龍與地下城第一版（Advanced Dungeons & Dragons 1st Edition）（1977年—1979年）
*進階龍與地下城第二版（Advanced Dungeons & Dragons 2nd Edition）（1989年）
自1997年TSR公司被威世智收購后，龍與地下城不再分為兩個系列出版。
*龍與地下城第三版（Dungeons & Dragons 3rd Edition）（2000年）
:龍與地下城3.5版（Dungeons & Dragons 3.5th Edition）（2003年）
*龍與地下城第四版（Dungeons & Dragons 4th Edition）（2008年）
:龍與地下城精華版（Dungeons & Dragons Essentials）（2010年）
*龍與地下城第五版（Dungeons & Dragons）（2014年）
2014年推出的第五版取消版號，名稱只留下「龍與地下城」，為了與其他版本作區別，一般玩家通常以「五版」或是開發時的代號「次世代（Dungeons & Dragons Next）」來當作代稱。
立體式的遊戲模型與場景。
* 《龍與地下城玩家手冊》——基本游戲機制和創造玩家角色的資料。
* 《龍與地下城城主指南》——進行遊戲的詳細規則以及帶團相關的技巧、提示。
* 《龍與地下城怪物圖鑒》——提供遊戲中各種怪物（生物）的數據資料。
此三本游戲用書稱為三寶書。通常DM需要這三本書，而普通參與者只需要《玩家手冊》。
* 亞空大作戰（Dungeons & Dragons，1983年）
* 龍槍：秋暮之巨龍（Dragonlance Dragons Of Autumn Twilight，2008年）
* 《龍與地下城》（Dungeons & Dragons，2000年）
* 《龍與地下城2：龍王的憤怒》（Dungeons & Dragons 2: Wrath of the Dragon God，2005年）
建立在D&D規則上的電腦角色扮演遊戲非常多。
* 早期有SSI和TSR簽約之後所產生出來的遊戲——金盒子系列（Golden Box）。
* 1990年代最為人所知的是CAPCOM發行的街機電子遊戲的毀滅之塔與地獄神龍。
* 2000年代最為著名的有BioWare公司的柏德之門系列、絕冬城之夜，和黑島工作室的異域鎮魂曲、冰風之谷系列。
+ 龍與地下城系列電子遊戲年表
龍與地下城電腦迷宮遊戲
Dungeons & Dragons Computer Labyrinth Game
龍與地下城手持版
Dungeons & Dragons Computer Fantasy Game
進階龍與地下城：雲山
Advanced Dungeons & Dragons: Cloudy Mountain
進階龍與地下城：塔敏的寶藏
Advanced Dungeons & Dragons: Treasure of Tarmin
Tom Loughry
Pool of Radiance
Home computers, NES
被遺忘的國度
Heroes of the Lance
Home computers, NES, Master System
U.S. Gold
青色枷鎖的詛咒
Curse of the Azure Bonds
Home computers
Dragons of Flame
Hillsfar
Westwood Studios
War of the Lance
銀色匕首之謎
Secret of Silver Blades
DragonStrike
Champions of Krynn
Home computers, Mega-CD, SNES, GBA, Amiga
魔眼殺機 2：隱月傳奇
Eye of the Beholder II: Legend of Darkmoon
Home computers, Amiga
Shadow Sorcerer
Pools of Darkness
克萊恩死亡騎士
Death Knights of Krynn
Neverwinter Nights (MMORPG)
AOL, Stormfront Studios, SSI
gateway to the savage frontier
Stormfront Studios
Order of the Griffon
空谷世界（Mystara）
Warriors of The Eternal Sun
Sega Mega Drive
克萊恩暗黑女王
The Dark Queen of Krynnr
Treasures of the Savage Frontier
MS-DOS, Amiga
魔法船：海盜
Spelljammer: Pirates of Realmspace
Cybertech Systems
魔眼殺機 3：血戰札諾爾
Eye of the Beholder III: Assault on Myth Drannor
MS-DOS, Amiga, Mega-CD, SNES
Silicon Knights
被遺忘的國度：無限冒險
Forgotten Realms: Unlimited Adventures
MS-DOS, Mac
MicroMagic, Inc.
浩劫殘陽：破碎大地
Dark Sun: Shattered Lands
Dungeon Hack
DreamForge Intertainment
Dungeons & Dragons: Tower of Doom
Arcade, Sega Saturn
浩劫殘陽：毀滅者甦醒
Dark Sun:Wake of the Ravager
Lion Entertainment
魔域傳奇：神聖之符
Ravenloft: Strahd's Possession
阿拉丁傳奇：精靈的詛咒
Al-Qadim: The Genie's Curse
Cyberlore Studios
Menzoberranzan
魔域傳奇：石之預言者
Ravenloft: Stone Prophet
DeathKeep
Windows, 3DO
浩劫殘陽在線：猩紅之沙
Dark Sun Online: Crimson Sands
Tachyon Studios
天賦神權：蛇女同盟
Birthright: The Gorgon's Alliance
Synergistic Software
Dungeons & Dragons: Shadow over Mystara
鐵與血：魔域戰士
Iron & Blood: Warriors of Ravenloft
Windows, PlayStation
Take 2 Interactive
Descent to Undermountain
Windows, Mac
柏德之門：劍灣傳奇
Baldur's Gate: Tales of the Sword Coast
Planescape:Torment
Black Isle Studios
Icewind Dale
柏德之門II：安姆疑雲
Baldur's Gate 2：Shadows of Anm
冰風之谷：寒冬之心
Icewind Dale: Heart of Winter
柏德之門 2：邪神霸權
Baldure's Gate 2：Throne of Bhaal
光芒之池：迷思卓諾遺跡
Pool of Radiance: Ruins of Myth Drannor
柏德之門：黑暗聯盟
Baldur's Gate: Dark Alliance
PS2, Xbox, GameCube, GBA
Snowblind Studios
Windows, Mac, Linux
冰風之谷II
Icewind Dale II
魔眼殺機(GBA版)
Dungeons & Dragons: Eye of the Beholder
Pronto Games
絕冬城之夜：黯影之心
Neverwinter Nights：Shadow of Undrentide
龍與地下城：英雄
Dungeons & Dragons: Heroes
Atari Hunt Valley Development Studio
邪惡元素神殿
The Temple of Elemental Evil
Troika Games
絕冬城之夜：黯影謎咒
Neverwinter Nights：Hordes of the Underdark
Floodgate Entertainment
柏德之門：黑暗聯盟2
Baldur's Gate: Dark Alliance II
PS2, Xbox
被遺忘的國度：惡魔之石
Forgotten Realms: Demon Stone
Windows, PS2, Xbox
絕冬城之夜：手機版
Neverwinter Nights: Mobile
絕冬城之夜：陰影守衛
Neverwinter Nights: ShadowGuard
絕冬城之夜：女巫覺醒
Neverwinter Nights: Witch's Wake
絕冬城之夜：國王密令
Neverwinter Nights: Kingmaker
龍與地下城：龍晶
Dungeons & Dragons: Dragonshard
Liquid Entertainment
絕冬城之夜：劍灣海盜
Neverwinter Nights: Pirates of the Sword Coast
龍與地下城 Online：風暴來臨
Dungeons & Dragons Online: Stormreach
Turbine, Inc.
絕冬城之夜：無盡地城
Neverwinter Nights: Infinite Dungeons\
絕冬城之夜：飛龍之冠
Neverwinter Nights: Wyvern Crown of Cormyr
絕冬城之夜 2
龍與地下城：戰略版
Dungeons & Dragons Tactics
Kuju Entertainment
絕冬城之夜 2：背叛者的面具
The Mask of Betrayer
絕冬城之夜 2：邪神降臨
Storm of Zehir
絕冬城之夜 2：西門城的秘密
Mysteries of Westgate
Ossian Studios
龍與地下城：匕首谷
Dungeons & Dragons: Daggerdale
PS3, Xbox 360, Windows
Bedlam Games
柏德之門：加強版
Baldur's Gate: Enhanced Edition
iOS, Android,  Mac, Windows, Linux
Overhaul Games
龍與地下城：競技場之戰
Dungeons & Dragons: Arena of War
iOS, Android
柏德之門 2：加強版
Baldur's Gate II: Enhanced Edition'
Lords of Waterdeep
Playdek
絕冬城之夜 Online
Neverwinter
Windows, Xbox One,PS4
Cryptic Studios
冰風之谷：加強版
Icewind Dale: Enhanced Edition
Sword Coast Legends
Windows, OS X, Linux, PS4, Xbox One
N-Space,Digital Extremes
Low Magic Age
Low Magic Studio
異域鎮魂曲：加強版
Planescape: Torment: Enhanced Edition
Beamdog
柏德之門III
Baldur's Gate III
Larian Studios
計算機編碼指電腦內部代表文字、符號、字母或數字的方式。電子計算機的文數字編碼，是指在計算機硬件軟件中對於文字或數值的內部表示。通常數值會儲存為位元組，而以組成它們的位元數給以名稱。選擇數值和位元模式之間的編碼，可以使計算機的操作便利；計算機處理器指令集所使用的位元編碼，通常需要將其格式再轉換以供外界的使用者來判讀，例如打印和顯示。對於紙筆書寫看似相同的文字符號或數值，在不同類型的電子計算機處理器內部中，可能有不同的約定用於整數和實數。大多數計算都是使用適合處理器暫存器的數碼格式來執行，但是某些軟件系統允許使用多種儲存方式，來表示任意大數。
計算機的基本儲存單位是“位元”，通過開關變化設置表達值0或1。在有兩個位元的情況下可以得到四個不同的狀態：
00   01   10   11
如果有三個位，則有八種狀態：
000   001   010   011   100   101   110   111
每當增加一個位時，將得到兩倍的狀態。
計算機使用不同數量的位元儲存不同種類的信息。4個位元被稱為一“nybble”，8個被稱為一字節，也有16，32，或更多位元組成的信息計量單位。
一個nybble可以為16種不同的情況編碼，例如數字0到15。大體上，使用任何序列的排列來表示不同的16種狀態是可以的，但在實際的應用通常是這樣的：
0000 = 十進制0           1000 = 十進制8
0001 = 十進制1           1001 = 十進制9
0010 = 十進制2           1010 = 十進制10
0011 = 十進制3           1011 = 十進制11
0100 = 十進制4           1100 = 十進制12
0101 = 十進制5           1101 = 十進制13
0110 = 十進制6           1110 = 十進制14
0111 = 十進制7           1111 = 十進制15
這樣的表示是很自然的，因為它符合我們所熟悉的十進制數表示方法。例如，給定一個十進制數：
: 7531
我們很自然地把它理解為：
: 7 × 1000 + 5 × 100 + 3 × 10 + 1 × 1
或者，使用10的冪來表示：
: 7 × 103 + 5 × 102 + 3 × 101 + 1 × 100
注意任何數（除了0）的0次冪都是1。
數據中的每個數字表示從0到9的值，這樣我們有10個不同的數字，那就是我們把它稱為“十進制”的原因。每個數字可以通過10的某次冪來決定它的位置。這聽起來很復雜，但實際上并不是這樣的。這正是當您讀一個數字的使用認為是理所當然的事情，您甚至都不用仔細思考它。
類似地，使用二進制編碼就像上面所說的那樣，值13是這樣編碼的：
: 1101
每一個位置有兩個數字可以選擇，所以我們稱它為“二進制”。因此，它們的位置是這樣決定的：
: 1101 =
: 1 × 23 + 1 × 22 + 0 × 21 + 1 × 20 =
: 1 × 8 + 1 × 4 + 0 × 2 + 1 × 1 = 13（十進制）
注意這里使用了2的冪：1、2、4和8。癡迷于計算機的人通常可以記住2的從2到16次冪，這并不是因為他們的記憶力，而是因為他們大量的使用這些數字：
20  =   1        28  =    256
21  =   2        29  =    512
22  =   4        210 =  1,024
23  =   8        211 =  2,048
24  =  16        212 =  4,096
25  =  32        213 =  8,192
26  =  64        214 = 16,384
27  = 128        215 = 32,768
216 = 65,536
注意的是，根據公制單位，值210 = 1,024通常被提及為“kilo”（千），或簡寫成“K”，所以很多2的高次冪通常可以簡寫成：
211 =  2 K =  2,048
212 =  4 K =  4,096
213 =  8 K =  8,192
214 = 16 K = 16,384
215 = 32 K = 32,768
216 = 64 K = 65,536
同樣的，值220 = 1,024 x 1,024 = 1,048,576通常被簡寫成“M”(即兆)：
221 = 2 M
222 = 4 M
而230曾被稱為“吉”，或“G”。下面我們將會大量使用這些修飾符號。
有一個很微妙的話題。如果我們使用16位，我們可以得到65,536種不同的值，但是這些值是從0到65,535的。人們通常從1開始數數，但是計算機是從0開始計數的。因為這對它們來說更簡便。這個小問題有時也會使得計算機混淆。
現在，我們得到了計算位的方法：
* 您只能在您所有的位的范圍內進行算術操作。也即是說，如果您正在使用的是16位，那您不能對65,535或更大的數據進行操作，否則您將得到一個“數據溢出”的錯誤。這個術語表明，您正在進行的是“有限精度”的操作。
* 使用這種編碼不能表示小數。您只能使用非小數的“整數”。
* 使用這種編碼不能表示負數。所有的數字都是“無符號數”。
雖然有這種限制，但是在計算機中對于簡單的增1計數來說，“無符號整數”還是十分有用的。它們對計算機來說是很容易處理的。通常計算機使用16位或32位無符號整數，通常被稱為“整數（integer）”或“長整數（long integer）”。一個整數允許對從0到65,535的數據進行操作，而一個長整型允許對從0到4,294,967,295的數進行操作。
現在讓我們討論一些偏外的話題：對二進制數字的表示方法。計算機通常使用二進制來表達數據，但是在實際中如果使用像這樣的二進制：
: 1001 0011 0101 0001
那將是一件痛苦的事，并且很容易出錯。通常計算機使用一個基于二進制的表達方式：八進制，或更通常使用的，十六進制。
這一件聽起來挺狡猾但實際上又很簡單的事。如果不是這樣的話，我們就不會這樣使用了。在平常的十進制體系中，我們有10數字（0到9）按以下方式構成排列：
: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
在八進制中，我們只有八個數字（0到7）按以下方式構成排列：
: 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 ...
也即是說，八進制的“10”相當于十進制的“8”，八進制的“20”相當于十進制的“16”，以此類推。
在十六進制中，我們只有十六個數字（0到9，然后是從a到f）按以下方式構成排列：
: 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 ...
也即是說，十六進制的“10”相當于十進制的“16”，十六進制的“20”相當于十進制的“32”。
這些表示數值的方法都是表位置的系統，但是它們使用的不是像十進制那樣的10，而是分別使用8和16。例如：
: 八進制756
: = 7 × 82 + 5 × 81 + 6 × 80
: = 7 × 64 + 5 × 8 + 6 × 1
: = 448 + 40 + 6 = 十進制494
: 十六進制3b2
: = 3 × 162 + 11 × 161 + 2 × 160
: = 3 × 256 + 11 × 16 + 2 × 1
: = 768 + 176 + 2 = 十進制946
好了，如果您還不是那么明白，不用擔心。我們想說明的是，對于八進制來說，他們剛好和3位二進制有一個完美的對應關系：
: 000 = 八進制0
: 001 = 八進制1
: 010 = 八進制2
: 011 = 八進制3
: 100 = 八進制4
: 101 = 八進制5
: 110 = 八進制6
: 111 = 八進制7
類似的，一個十六進制數剛好和一個4位的二進制數對應。
0000 = 十六進制0       1000 = 十六進制8
0001 = 十六進制1       1001 = 十六進制9
0010 = 十六進制2       1010 = 十六進制a
0011 = 十六進制3       1011 = 十六進制b
0100 = 十六進制4       1100 = 十六進制c
0101 = 十六進制5       1101 = 十六進制d
0110 = 十六進制6       1110 = 十六進制e
0111 = 十六進制7       1111 = 十六進制f
因此，把一個很長的二進制數轉換成一個八進制就變得很簡便，例如：把二進制1001001101010001轉化成八進制：
1 001 001 101 010 001 二進制 = 111521 八進制
轉換成十六進制會更簡單：
1001 0011 0101 0001 = 9351 十六進制
但是要把它轉換成十進制（37,713）就比較麻煩了。八進制和十六進制使得轉換二進制機器級的數字變得簡單方便。
在定義了無符號二進制數后，我們就要著手定義負數了，或稱為“有符號整數”。最簡單的一個方法是保留一個位來表示數值的符號。這個“符號位”可以位于數值的最左邊，當然也可以位于數值的最右邊。如果這個符號位為0，表示數值是正的，如果這個符號位為1，表示數值是負的。
這樣做是可以的，雖然從人類的角度來看是最明顯的解決方案，但是它對于計算機來說有可能帶來一些難度。例如，這種編碼使得0可以有正負兩種。人們可能對此感到不可思議，但是這對計算機來說是適應的。
對計算機來說，更自然的表達方式是對給定的位數的二進制數按其范圍分成兩半，其中前一半用來表示負數。例如，在4位數值中，你可以得到：
0000 = 十進制0
0001 = 十進制1
0010 = 十進制2
0011 = 十進制3
0100 = 十進制4
0101 = 十進制5
0110 = 十進制6
0111 = 十進制7
1000 = 十進制-8
1001 = 十進制-7
1010 = 十進制-6
1011 = 十進制-5
1100 = 十進制-4
1101 = 十進制-3
1110 = 十進制-2
1111 = 十進制-1
現在我們得到了一個“有符號整數”數字系統，使用所知道的，為了一些不是很重要的原因，“補碼”編碼方式。對16位有符號數字編碼來說，我們可以得到范圍為-32,768到32,767的有符號數字。對一個32位的有符號編碼系統來說，我們可以為從-2,147,483,648到2,147,483,647的數編碼。
與只改變符號位來表示負數的編碼方式相比，“補碼”編碼方式與之有所不同。例如對于-5來說，只對符號位編碼，應該是：
但是對于“補碼”編碼方式來說，則是：
這對于符號編碼來說是-3。關于為什么計算機要使用補碼這種編碼方式我們會在后面解釋。
所以，現在我們可以以二進制方式來表示正負兩種不同的數值。請記住對于一個二進制數來說，只有兩種解釋方式。如果在內存中有一個這樣的二進制數值：
-- 這只能解釋為十進制的“13”或“-5”。
這種格式通常被用于商業計算（例如在電子表格或COBOL中）；因為在這里，丟棄小數位來記錄金錢是不能接受的。因此了解二進制如何存貯小數是十分有用的。
首先去我們必須決定要用多少位來存貯小數部分和多少位來存儲整數部分。假設我們使用32位來表示這種格式，那么我們用16位表示整數部分，16位來表示小數部分。
小數部分怎么使用呢？這沿用了表示整數的方式：如果8位接下來是4位，是2位，1位，那么當然接下來就是半位，1/4位和1/8位等等了。
整數位            小數位
0.5      =    1/2 = 00000000 00000000.10000000 00000000
1.25     =  1 1/4 = 00000000 00000001.01000000 00000000
7.375    =  7 3/8 = 00000000 00000111.01100000 00000000
有一點棘手的是，如果您要表達1/5（十進制的0.2），那您不能得到精確的數值表達方式。最好的方法只能是：
: 13107/65536 = 00000000 00000000.00110011 00110011 = 0.1999969... 十進制
: 13108/65536 = 00000000 00000000.00110011 00110100 = 0.2000122... 十進制
然而不，您不能這樣做，即使您有更多的數位來表達。問題是，一些小數使用二進制的方式不能精確地表達出來。除非您使用一個特殊的辦法。這個特殊的辦法是分別使用兩個數字來表達小數：一個是分子，一個是分母。然后您可以使用學校學習的加、減、乘、除來得到它們。然而，這些方法不能表達更高級的數字（例如平方根），或者如果這兩個分母的最小公倍數很大的話，那就難以使用。這就是使用定點小數表達小數的缺點。
當我們使用了有符號和無符號的數值表達方式時。如果遇到連32位也不足以表達的大范圍的數，或也許可以表達，但我們必須為此放棄小數位時，我們可以選擇的以獲得更大范圍的數值的表達方式的方法是使用“浮點小數”格式而拋棄“定點小數”格式。
在十進制中，我們對以下的表達方式很熟悉：
: 1.1030402 × 105 = 1.1030402 × 100000 = 110304.02
這表示“1.103402乘以一個1后面跟著5個零的數”。我們可以得到一個確定的稱謂“尾數”的數值（1.1030402），乘以一個10的某個冪級數(E5，表示105或100,000），也就是“冪級數”。如果我們使用一個負的冪級數，那就意味著乘以該正級數的倒數。例如：
: 2.3434E-6 = 2.3434 × 10-6 = 2.3434 × 0.000001 = 0.0000023434
使用這種定義的好處是我們可以得到更大范圍的數值，雖然尾數部分的精確度受到影響。相似的原理可以應用于二進制中為計算機使用。人們設計了很多方式，但是作常用的是由美國電器和電子工程師協會定義的一種方法。它對64位浮點格式的定義是：
* 11位二進制表示指數，使用“超1023”格式。這種格式使得指數可以表示為0到2047的無符號數，但是在得到真實值前必須先減去1023；
* 52位尾數，使用無符號數字表示；
下面我們使用一個例子來了解計算機如何使用內存的8字節存儲這些數字：
第0字節：         S    x10  x9   x8   x7   x6   x5   x4
第1字節：         x3   x2   x1   x0   m51  m50  m49  m48
第2字節：         m47  m46  m45  m44  m43  m42  m41  m40
第3字節：         m39  m38  m37  m36  m35  m34  m33  m32
第4字節：         m31  m30  m29  m28  m27  m26  m25  m24
第5字節：         m23  m22  m21  m20  m19  m18  m17  m16
第6字節：         m15  m14  m13  m12  m11  m10  m9   m8
第7字節：         m7   m6   m5   m4   m3   m2   m1   m0
其中的“S”表示符號位，“X”表示指數位（階碼？），“m”表示尾數位。一旦這些數字被讀取，它將轉換成：
: &lt;符號&gt; × (1 + &lt;小數形式的尾數&gt;) × 2&lt;階碼&gt; - 1023
這個方式提供的數字范圍為：
這種方式也定義了一些不是數字的值，例如“NaNs”（“不是一個數字”）。這通常用來返回表示數字溢出的信息。通常您不會碰到它，所以我們也不會對它進行進一步討論。一些程序使用32位浮點小數。最普遍的是使用32位尾數，1位符號位，8位階碼和“超127”格式。它提供7位十進制數字。
第0字節：         S    x7   x6   x5   x4   x3   x2   x1
第1字節：         x0   m22  m21  m20  m19  m18  m17  m16
第2字節：         m15  m14  m13  m12  m11  m10  m9   m8
第3字節：         m7   m6   m5   m4   m3   m2   m1   m0
數字轉換時使用：
: &lt;符號&gt; × (1 + &lt;小數形式的尾數&gt;) × 2&lt;階碼&gt; - 127
它的范圍為：
通常我們可以把32位的二進制浮點數稱為“單精度”浮點數，而把64位的二進制浮點數稱為“雙精度”浮點數。如果我們使用real的時候，通常表示雙精度的浮點數；而使用float的時候，我們通常指單精度的浮點數。
但是要記住的是，浮點數在計算機的存儲是連續的：當計算機內存中有一個64位數據時，它可能是一個雙精度的浮點數，也可能是兩個單精度的浮點數，或4個有符號或無符號的整數，或其它8位的數據，這取決于計算機如何讀取它們。如果計算機把4個無符號整數以雙精度浮點小數方式讀出的話，它可以得到一個雙精度浮點小數，但這個數據可能是一個垃圾數據。
所以，現在雖然我們已經解決了正、負數的存貯方式，但是對于浮點數來說，仍然存在一些與整數一樣的缺陷，例如：
* 像整數一樣，浮點數也有范圍。雖然我們得到了比整數要大得多的范圍，但是仍然是有限的，如果您試圖把兩個很大的數乘起來，您可能會得到“數據上溢”的錯誤。而如果您把一個小的數字除以一個函大的數字，那就可能使得指數的數值出錯，出現“數據下溢”的錯誤。通常把最大值稱為“機器無窮”，因為它是計算機所能處理的最大的數字。
* 另一個問題是精度。雖然您有15位的數字來表示很大的數，但是當對它進行四則運算的時候，它們可能不給您任何提示就把一些數字丟棄。這意味著，如果您把一個很小的數加到一個很大的數值上去的時候，由于這個數字太小，以至于15位或16位的精度都不能顯示它，計算機就會把這個數字丟棄。如果您在做計算的時候得到一個十分奇怪的數字，您可以需要檢查您的數據范圍是否合適。
:這意味著，如果您做浮點計算，較小的數字很可能被丟棄了。雖然這在平常來說并不明顯，但是如果您是做要求很高的數學分析工作，這些錯誤可能會累積起來，以至于最后得到的結果十分不準確。
:這個錯誤對進行數學研究的人來說十分重要，他們必須對誤差十分了解，以及研究一些辦法來減少誤差，并且應該可以估計到誤差的大小。
:順便說一句，“精度”問題與“范圍”問題不同，前者指的是有關尾數的表示范圍，后者指的是指數的表達范圍。
* 另外一個不太明顯的誤差是由于浮點數的二進制和十進制并不完全相等。如果您操作的數好是2的冪級數的倒數，例如0.75，那是用二進制可以準確的標示為0.11，因為它剛好是1/2+1/4的值。可是不幸的是，您可能通常不會得到如此恰到好處的數字，這就是說，計算機會把一些數字丟掉，例如要表示0.1，只能使用無窮循環的二進制小數0.000110011……表示了。
如果您對這部分內容不理解，別擔心。這里的要點是，計算機不是萬能的，它只是一部機器，并要符合一定的規則和受到一定的限制。雖然很多人對計算機抱有孩子似的信任，但是在計算機雖好的解決方法下也有一些不可避免的不精確。
對于低級語言的編程者來說，他們要擔心有符號和無符號、定點和浮點數的運算。他們必須使用十分不同的代碼來實現操作。
但是，對高級語言的編程者來說，諸如LISP和Python提供了一些列諸如“有理數”、“復數”之類的抽象數據類型。而他們可以斷言他們的系統可以使用數學操作做正確的運算。由于操作符重載，數學運算可以應用于任何數字——無論是有符號的、無符號的、有理數、定點小數、浮點小數或復數。
現在我們已經得到不同的方法來存儲數據了，那么文本呢？我們怎么存儲姓名、地址或寫給朋友的信件呢？
當然，如果您還記得位是位的話，我們沒有理由不能使用位來表達字母“A”或“？”或“Z”之類的。因為很多計算機每次處理一個字節，所以使用單字節的數據來表達單個字母會很方便。我們可以使用這個：
0100 0110 (hex 46)
來表示字母“F”。計算機使用這樣的“字符編碼”來向顯示程序傳送要求的文本。
下面是一個用來存儲西方字母的標準二進制編碼，就是通常所說的“美國信息交換標準碼”（英文簡稱“ASCII”），下面的編碼為ASCII編碼，使用“d”表示十進制編碼，“h”表示十六進制代碼，“o”表示八進制代碼：
ASCII碼表
ch ctl   d  h  o     ch   d  h  o     ch   d  h   o     ch    d  h   o
NUL ^@   0  0  0     sp  32 20 40      @  64 40 100      '   96 60 140
SOH ^A   1  1  1
33 21 41      A  65 41 101      a   97 61 141
STX ^B   2  2  2      "  34 22 42      B  66 42 102      b   98 62 142
ETX ^C   3  3  3      #  35 23 43      C  67 43 103      c   99 63 143
EOT ^D   4  4  4      $  36 24 44      D  68 44 104      d  100 64 144
ENQ ^E   5  5  5      %  37 25 45      E  69 45 105      e  101 65 145
ACK ^F   6  6  6      &  38 26 46      F  70 46 106      f  102 66 146
BEL ^G   7  7  7      `  39 27 47      G  71 47 107      g  103 67 147
BS  ^H   8  8 10      (  40 28 50      H  72 48 110      h  104 68 150
HT  ^I   9  9 11      )  41 29 51      I  73 49 111      i  105 69 151
LF  ^J  10  a 12      *  42 2a 52      J  74 4a 112      j  106 6a 152
VT  ^K  11  b 13      _  43 2b 53      K  75 4b 113      k  107 6b 153
FF  ^L  12  c 14      ,  44 2c 54      L  76 4c 114      l  108 6c 154
CR  ^M  13  d 15      _  45 2d 55      M  77 4d 115      m  109 6d 155
SO  ^N  14  e 16      .  46 2e 56      N  78 4e 116      n  110 6e 156
SI  ^O  15  f 17      /  47 2f 57      O  79 4f 117      o  111 6f 157
DLE ^P  16 10 20      0  48 30 60      P  80 50 120      p  112 70 160
DC1 ^Q  17 11 21      1  49 31 61      Q  81 51 121      q  113 71 161
DC2 ^R  18 12 22      2  50 32 62      R  82 52 122      r  114 72 162
DC3 ^S  19 13 23      3  51 33 63      S  83 53 123      s  115 73 163
DC4 ^T  20 14 24      4  52 34 64      T  84 54 124      t  116 74 164
NAK ^U  21 15 25      5  53 35 65      U  85 55 125      u  117 75 165
SYN ^V  22 16 26      6  54 36 66      V  86 56 126      v  118 76 166
ETB ^W  23 17 27      7  55 37 67      W  87 57 127      w  119 77 167
CAN ^X  24 18 30      8  56 38 70      X  88 58 130      x  120 78 170
EM  ^Y  25 19 31      9  57 39 71      Y  89 59 131      y  121 79 171
SUB ^Z  26 1a 32      :  58 3a 72      Z  90 5a 132      z  122 7a 172
ESC ^  27 1b 33      ;  59 3b 73        91 5b 133      {  123 7b 173
FS  ^\  28 1c 34        62 3e 76      ^  94 5e 136      ~  126 7e 176
US  ^_  31 1f 37      ?  63 3f 77      _  95 5f 137     DEL 127 7f 177
上面這個列表的最左邊有一個些奇怪的字符，例如“FF”和“BS”，這些都不是文本字符。相反，它們是控制字符，也就是說當這些字符發送到特定的設備時，它將產生一些動作。例如“FF”表示換頁，或彈出；“BS”表示退格，而“BEL”表示一個響聲。在一個文本編輯器中，它們會顯示成一個白色或黑色的方塊，或笑臉、音符或其它一些奇怪的符號。要打出這些字符，可以使用CTRL鍵和一個合適的代碼。例如同時按住“CTRL”和“G”，或簡寫成“CTRL-G”或“^G”可以打出一個BEL字符。
上面這個ASCII碼表示定義了128個字符，這意味著ASCII碼只需要7位。但是，很多計算機都以字節為單位存儲信息。這個額外的一位可以定義第二個128個字集，一個“擴展”字集。
在實際中，有很多不同的“擴展”字集，提供很多例如數學符號等的符號或非英語字符。這個擴展字集并沒有進行標準化，并經常會引起混淆。
這個表格強調了這篇文章的主題：位就是位。這樣的話，您可以使用位來表示字符。您可以把特殊的代碼描述成特殊的十進制、八進制和十六進制，但是它們仍然是相同的代碼。這些數值的表達，無論是十進制、八進制或十六進制，都只是相同的位的表達。
當然，您可能在一段話中表達很多的字符，例如：
: Tiger, tiger burning bright!
這只是簡單的替換成ASCII碼，表示成：
: 54 69 67 65 72 2c 20 74 69 67 65 72 20 62 75 ...
計算機把這種ASCII“字符串”以連續空間的“數組”來存儲。一些應用程序可以包括一個二進制數值表示字符串的長度，但是更通常的做法是使用一個表示結尾的字符NULL（ASCII表中的0字符〕表示字符串的結束。
F#是由微軟發展的為.NET語言提供運行環境的程序設計語言，是函數程式語言（FP，Functional Programming），函數程式語言最重要的基礎是Lambda Calculus。它是基于OCaml的，而OCaml是基于ML函數程式語言。有時F#和OCaml的程式是可以交互編譯的。
F#支援高階函數、柯里化、惰性求值、Continuations、模式匹配、閉包、列表處理和元編程。這是一個用于顯示.NET在不同編程語言間互通的程序設計，可以被.NET中的任意其它代碼編譯和調用。
2002年微軟開始由Don Syme帶領研發F#，從C#，LINQ和Haskell中獲取了經驗，2005年推出第一個版本，2007年7月31日釋出1.9.2.9版。2007年底，微軟宣布F#進入產品化的階段。
F#已被集成在Visual Studio 2010中，版本是2.0，含有對.Net Framework的完全支持。
F#現在在Visual Studio 2015中，版本是4.0。
F#現在在Visual Studio 2017中，版本是4.1。
一些小小范例如下：
// This is a comment for a sample hello world program.
printfn "Hello World!"
具有構造函數的Person類，該構造函數具有名稱和年齡以及兩個不可變的屬性。
/// This is a documentation comment for a type definition.
type Person(name : string, age : int) =
member x.Name = name
member x.Age = age
/// class instantiation
let mrSmith = Person("Smith", 42)
一個經常用于演示函數式語言語法的簡單示例。此處以32位的階乘函數為例，使用f#
A simple example that is often used to demonstrate the syntax of functional languages is the factorial function for non-negative 32-bit integers, here shown in F#:
/// Using pattern matching expression
let rec factorial n =
_ -> n * factorial (n - 1)
/// For a single-argument functions there is syntactic sugar (pattern matching function):
let rec factorial = function
n -> n * factorial (n - 1)
/// Using fold and range operator
let factorial n = 1..n |> Seq.fold (*) 1
/// Iteration using a 'for' loop
let printList lst =
for x in lst do
printfn "%d" x
/// Iteration using a higher-order function
let printList2 lst =
List.iter (printfn "%d") lst
/// Iteration using a recursive function and pattern matching
let rec printList3 lst =
match lst with
h :: t ->
printfn "%d" h
printList3 t
斐波那契數列數列示例：
/// Fibonacci Number formula
let rec g n f0 f1 =
0 -> f0
1 -> f1
_ -> g (n - 1) f1 (f0 + f1)
g n 0 1
/// Another approach - a lazy infinite sequence of Fibonacci numbers
let fibSeq = Seq.unfold (fun (a,b) -> Some(a+b, (b, a+b))) (0,1)
// Print even fibs
1 .. 10
> List.map     fib
> List.filter  (fun n -> (n % 2) = 0)
> printList
// Same thing, using a list expression
for i in 1..10 do
let r = fib i
if r % 2 = 0 then yield r
一個Windows程序樣本示例:
// Open the Windows Forms library
open System.Windows.Forms
// Create a window and set a few properties
let form = new Form(Visible=true, TopMost=true, Text="Welcome to F#")
// Create a label to show some text in the form
let label =
let x = 3 + (4 * 5)
new Label(Text = sprintf "x = %d" x)
// Add the label to the form
form.Controls.Add(label)
// Finally, run the form
Application.Run(form)
多線程編程示例（此處為CPU和I/O任務同時進行）:
/// A simple prime number detector
let isPrime (n:int) =
let bound = int (sqrt (float n))
seq {2 .. bound} |> Seq.forall (fun x -> n % x  0)
// We are using async workflows
let primeAsync n =
async { return (n, isPrime n) }
/// Return primes between m and n using multiple threads
let primes m n =
seq {m .. n}
> Seq.map primeAsync
> Async.Parallel
> Async.RunSynchronously
> Array.filter snd
> Array.map fst
// Run a test
primes 1000000 1002000
> Array.iter (printfn "%d")
7月11日是陽歷年的第192天（閏年是193天），離一年的結束還有173天。
塞族共和國軍隊攻佔斯雷布雷尼察地區隨後部隊展開大屠殺，最終估計殺害了約超過8000名波士尼亞人。
明朝官員鄭和率領龐大船隊出使西太平洋、印度洋沿岸國家。
澳洲著名戰士雅岡在白人殖民者進攻西澳大利亞州時遭到殺害。
185px 愛爾蘭簽署停戰協定正式結束愛爾蘭獨立戰爭。
195px 美國作家哈波·李的小說《梅岡城故事》首次出版。
* 1405年：中國明朝皇帝朱棣派遣鄭和率領船隊從太倉出發，出使西太平洋、印度洋沿岸國家，史稱鄭和下西洋。
* 1533年：教宗克勉七世把英格蘭國王亨利八世絕罰。
* 1789年：法國財政大臣雅克·內克爾被法國國王路易十六免除職務，并被命令立即離開法國。
* 1804年：前美國財政部長亞歷山大·漢彌爾頓在紐澤西州威霍肯和美國副總統阿龍·伯爾展開決鬥，隔天便因受致命傷而喪生。
* 1810年：拿破侖吞并荷蘭。
* 1811年：義大利科學家阿密迪歐·亞佛加厥提出關於氣體分子的假說，後來則稱作亞佛加厥定律。
* 1833年：澳洲澳洲原住民Noongar族戰士雅岡遭一名白人少年殺害。
* 1848年：英國滑鐵盧車站正式通車。
* 1864年：南北戰爭於華盛頓哥倫比亞特區發生Battle of Fort Stevens會戰。
* 1921年：1921年蒙古革命：外蒙古重新宣布獨立，成立君主立憲政府。
* 1921年：愛爾蘭與英國簽定停火協議。
* 1921年：前美國總統威廉·霍華德·塔虎脫宣誓就任美國首席大法官，成為唯一一位曾就任這兩個職位者。
* 1935年：靜岡縣發生6級，死傷人數9299名。
* 1957年：伊斯蘭教伊斯瑪儀派第48代伊瑪目阿迦汗三世去世，第49代阿迦汗四世繼位。
* 1960年：美國作家哈波·李反映美國深南部地區種族歧視和社會不公平現象的小說《梅岡城故事》首次出版。
* 1961年：《中朝友好合作互助條約》在北京簽訂。
* 1962年：人造衛星首次播送全球電視。
* 1973年：里約格朗德航空820號班機空難，導致128人死亡，11人生還。
* 1978年：西班牙一運載工業用煤氣的卡車發生爆炸，引起地中海海岸一處游覽營地起火，至少有180人喪生。
* 1979年：美國天空實驗室進入大氣層燒毀。
* 1982年：意大利獲1982年世界盃足球賽冠軍。
* 1989年：哥倫比亞、墨西哥、委內瑞拉三國集團成立。
* 1991年：奈及利亞航空2120號班機空難，機上261人全部罹難。
* 1993年：英國培育出世界第一只-{zh-tw:基因改造; zh-cn:轉基因}-公雞。
* 1995年：比爾·柯林頓總統宣布美利堅合眾國和越南社會主義共和國外交關係正式正常化。
* 1995年：波黑塞族共和國軍隊攻占斯雷布雷尼察，隨后開始進行大屠殺，殺害了大約7500名穆斯林。
* 1995年：被軟禁六年的昂山素姬獲釋。
* 2005年：中國鄭和下西洋十甲子第一個航海日。
* 2006年：微軟停止了對Windows 98與Windows Me的支援。
* 2006年：中國運動員劉翔在瑞士洛桑舉行的國際田聯超級大獎賽中以12秒88打破男子110米欄的世界紀錄。
* 2006年：印度孟買發生火車連環爆炸，造成209人喪生，數百人受傷。
* 2007年：《頭條日報》成立。
* 2007年：中華民國行政院院長張俊雄在主持行政院院會時宣佈每年的7月15日定為解嚴紀念日，只紀念，不放假。
* 2010年：2010年國際足總世界盃於南非舉辦決賽，並由西班牙國家足球隊取得優勝。
* 2012年：美國國家航空暨太空總署和歐洲太空總署宣布發現了冥王星的第五顆衛星S/2012 P 1。
* 1274年：羅伯特·布魯斯，蘇格蘭國王，民族英雄（1329年逝世）
* 1628年：德川光國，日本大名（1701年逝世）
* 1657年：腓特烈一世，普魯士國王（1713年逝世）
* 1834年：詹姆斯·惠斯勒，美國印象派畫家（1903年逝世）
* 1899年：埃爾文·布魯克斯·懷特，美國作家（1985年逝世）
* 1903年：魯道夫·阿貝爾，蘇聯知名間諜（1971年逝世）
* 1916年：高夫·惠特蘭，澳大利亞政治家，第21任澳大利亞總理（2014年逝世）
* 1918年：威妮夏·伯尼，冥王星的命名者（2009年逝世）
* 1931年：大塚康生，日本原畫師（2021年逝世）