C Primer Plus
常量(constant)
變量(variable)
數(shù)據(jù)類型
通過(guò)一下關(guān)鍵字創(chuàng)建的類型,按照計(jì)算機(jī)的存儲(chǔ)方式分為兩大基本類型:整數(shù)和浮點(diǎn)數(shù)。
int
基本整數(shù)類型
%d格式化輸出整型,%5d格式化成5位輸出。
%o八進(jìn)制顯示,%#o帶八進(jìn)制前綴顯示。
%x十六進(jìn)制顯示,%#x、%#X帶十六進(jìn)制前綴顯示。
- 整數(shù)溢出,溢出是為定義的行為,C標(biāo)準(zhǔn)并未定義有符號(hào)類型的溢出規(guī)則。
可移植整數(shù)類型stdint.h和inttypes.h
1.C語(yǔ)言為現(xiàn)有類型創(chuàng)建了更多類型名,定義在stdint.h中。
- 精確寬度整數(shù)類型(exact-width integer type):如int32_t, uint_32_t。但是這些依賴于計(jì)算機(jī)的底層系統(tǒng)的支持。
- 最小寬度類型(minimum width type): int_least8_t表示可容納8位有符號(hào)整數(shù)值的類型中寬度最小的類型的一個(gè)別名。
- 最快最小寬度類型(fastst minimum width type): 如int_fast8_t 表示對(duì)8位有符號(hào)值而言運(yùn)算最快的整數(shù)類型的別名。
- 最大整數(shù)類型:intmax_t、uintmax_t.
2.有了以上定義類型,就需要提供相應(yīng)的輸入和輸出,定義在inttypes.h中。C語(yǔ)言提供了一些字符串宏(后面會(huì)提到)來(lái)看是可以值類型。如PRid32代表打印32位有符號(hào)值的合適轉(zhuǎn)換說(shuō)明。
可移植類型的更多解析見書的附錄B。
long、short、unsigned、signed基本整數(shù)類型的變式
long要添加L、l后綴,long long使用LL后綴,u表示unsigned。
%u輸出unsigned int。
%ld輸出long。
%lx以十六進(jìn)制數(shù)處long。
%lo以八進(jìn)制輸出long。
%hd輸出short。
%hu以八進(jìn)制輸出unsigned long。
%lld輸出long long。
%llu unsigned long long。
char
字母和其他字符,也表示較小的整數(shù)。
單引號(hào)括起來(lái)的字符。實(shí)際存儲(chǔ)的是相應(yīng)的代碼值。ASCII值。
- 非打印字符
char beep = 7; //直接使用ASCII
char beep = \a;//使用轉(zhuǎn)義字符
以上兩句是一樣的,都是蜂鳴。警報(bào)字符改變活躍位置。
使用ASCII碼要注意數(shù)字和數(shù)字字符的區(qū)別。
%c打印字符
float、double、long double 帶小數(shù)點(diǎn)的數(shù)。
在聲明的時(shí)候加上f或F后綴,編譯器會(huì)識(shí)別成float類型。使用l或L后綴,編譯器會(huì)識(shí)別成long double類型。沒(méi)有后綴默認(rèn)是double類型。
- 十六進(jìn)制表示浮點(diǎn)型:p代替e,用2的冪代替10的冪(p計(jì)數(shù)法)。
0xa.1fp10 - a = 10
.1 = 1/16
.0f = 15/256
p10 = 2^10
%f輸出浮點(diǎn)數(shù)。%e打印指數(shù)計(jì)數(shù)法的浮點(diǎn)數(shù)。如果系統(tǒng)支持十六進(jìn)制,可用啊替代e。
%Lf、%Le、%La打印long double。
浮點(diǎn)數(shù)的溢出分為上溢(underflow)和下溢(subnormal)。
- 上溢:計(jì)算導(dǎo)致數(shù)字過(guò)大,超過(guò)當(dāng)前類型能表達(dá)的范圍。
- 下溢:損失了類型全精度的浮點(diǎn)值稱為低于正常的浮點(diǎn)值。
特殊的浮點(diǎn)值:NaN(not a number)。碰到未定義行為會(huì)返回NaN值。
void
_Bool
布爾值(true|flase)僅占一個(gè)bit。
_Complex
復(fù)數(shù)
_Imaginary
虛數(shù)