資料型別和儲存

2021-10-07 12:42:37 字數 1956 閱讀 1184

在c和c++中的浮點分為floatdouble

這2個浮點型別的區別在於寬度,在儲存方式上沒有區別。

首先需要說明一點二進位制是沒辦法表示負數的,所以負數的二進位制表示有各種規範。

c和c++採用的是ieee標準,下面用乙個float的例子來說明吧

先將這個實數的絕對值化為二進位制格式

將這個二進位制格式實數的小數點左移或右移n位,直到小數點移動到第乙個有效數字的右邊。

從小數點右邊第一位開始數出二十三位數字放入第22到第0位。

如果實數是正的,則在第31位放入「0」,否則放入「1」。

如果n 是左移得到的,說明指數是正的,第30位放入「1」。如果n是右移得到的或n=0,則第30位放入「0」。

如果n是左移得到的(也就是得到的指數),則將n減去1後化為二進位制,並在左邊加「0」補足七位,放入第29到第23位。

float i =

1.25

;

首先把i轉換成浮點數的二進位制,首先整數部分就是0001,小數部分則是0.25∗2

=0.5⋅⋅

⋅0

0.25*2=0.5···0

0.25∗2

=0.5

⋅⋅⋅0

,0.5∗2

=1⋅⋅

⋅1

0.5*2=1···1

0.5∗2=

1⋅⋅⋅

1。取商的整數部分,然後順序排列01。那麼這個二進位制就表示出來了是1.01。

符號位(31)

指數部分(30-23)8位

尾數部分(22-0)23位

正數0,負數1

根據第5條n=0,30位為0

第6條指數n=0,減去1是-1

轉為2進製11111111,取後7位

儲存小數點後的位數,不夠23位補0

00(30)1111111(29-23)

01000000000000000000000(22-0)

得到了這一串二進位制數就是i在電腦中儲存的樣子了,在彙編中會被轉成16進製制便於檢視。

double跟float的區別只是更加精確而已,儲存是一樣的,就是補的位數更多了而已。至於不會把10進製負數轉成2進製的可以看看這個回答十進位制負數怎麼轉化為二進位制

指數部分網上大多數是這樣說的,float型別是元資料+127(1111111)後轉成2進製,double型別則是元資料+1023(1111111111)後轉成2進製。不管哪種說法結果都是一樣的.

ascii 碼使用指定的 7 位或 8 位二進位制數組合來表示 128 或 256 種可能的字元。

標準 ascii 碼使用 7 位二進位制數來表示所有的大寫和小寫字母,數字 0 到 9、標點符號,以及在美式英語中使用的特殊控制字元。

擴充套件 ascii 碼允許將每個字元的第 8 位用於確定附加的 128 個特殊符號字元、外來語字母和圖形符號。

漢字編碼標準也在其中有介紹

#include

intmain()

/*outputa97

*/

在初學c的時候,我想大多數都是說int是整型,short是短整型,char是字元型,floatdouble是浮點型。通過這個例子我想其實很清楚了。int i = 『a』 這個**應該足夠讓你感到驚訝了。除了浮點型,不論是intshortchar的區別只是寬度而已,也就是一千個讀者有一千個哈姆雷特,究竟是整數還是字元,取決於你。浮點的儲存跟整型不一樣所以不能一概而論。

MySQL資料型別和儲存機制

資料型別算是一種字段約束,它限制每個欄位能儲存什麼樣的資料 能儲存多少資料 能儲存的格式等。mysql mariadb大致有5類資料型別,分別是 整形 浮點型 字串型別 日期時間型以及特殊的enum和set型別。資料型別之所以能限定欄位的資料儲存長度,是因為在建立表時在記憶體中嚴格劃定了位址空間,位...

Hive SQL資料型別和儲存格式

1 基本資料型別 hive支援關係型資料中大多數基本資料型別 型別描述 示例boolean true false true tinyint 1位元組的有符號整數 128 127 1y smallint 2個位元組的有符號整數,32768 32767 1sint 4個位元組的帶符號整數 1bigint...

Android Bundle儲存資料型別

曾經被問到這樣乙個問題 bundle能存哪些資料型別,不能存哪些資料型別?當時那個汗啊,因為,平常使用bundle,要麼使用基本資料型別,要麼序列化自定義的class,那到底能存哪些型別,不能存哪些呢?今天查閱了下google官方的文件 羅列了以下這些是可以的 void putall bundle ...