他們都是無符號的
char16_t 用 u表示
char32_t用u表示
bool 非0都是true
盡量用const而不是#define來作為常量標註 1來可以限定型別,2來可以限定作用域範圍
float型別的儲存方式: 計算機會分別儲存兩部分 1部分儲存的是值,另一部分是儲存對值得縮小放大倍數 (10的倍數)
float的精度比double精度差 如果有可能計算到超過6位的情況下 就使用double 我感覺只要是float 超過3位就可以用double了
因為float的精度只有到前7位 而他這個加1.0 是在第23位新增 無影響 所以 這個結果是0
#include int main()
e:\cpp\2019-4-12\3>.\fltadd.exe
a = 2.34e+022
b - a = 0
c++ 表示式的運算順序 先看優先順序再看運算元的結合性
計算時一定要考慮到float型別的精度問題 這貨就到6位 剩下的就是四捨五入
關於除法的一些東西:
#include int main()
結果
e:\cpp\2019-4-12\3>divide.exe
integer division: 9/5 = 1
floating-point division: 9.0 / 5.0 = 1.800000
mixed division: 9.0/5 = 1.800000
double constants: le7/9.0 = 1111111.111111
float constants: 1e7/9.0f = 1111111.125000
這表明 除法中其中有一位數是浮點型 結果就是浮點型
預設是double 如果加了f就按float來計算 就很容易損失精度
關於資料型別隱式轉換
float 轉 int 小數點直接截斷, 並且 數值可能會超過int的最大值 這個轉換的結果 c++並沒有定義應該是什麼 所以 很有可能是隨機的。
精度高的轉換成精度低的資料型別將造成資料的不準確。
有些編譯器是不支援 直接將double或者float賦值給int型 會報錯
兩個short型別變數進行運算賦值給short型別的變數時 會先將這兩個short的值轉換為int然後進行運算,然後再轉換成short。 這麼幹的原因是運算速度快。這情況也適用於unsigned short 。會轉換成unsigned int 這樣確保了不會損失資料
其他的型別自動轉換規則
強制型別轉換:
c++風格:long(i)或c風格 (long)i 都行
或者 static_cast(i) : static_cast(value) 這種轉換更加嚴格。但是具體多嚴格 還沒說 15章的時候才說- -好久
不改變i本身而是生成1個新的,指定型別的值(說話要說全 )
auto 宣告 自動判斷資料型別。 只是簡單講了下 在stl中才用的多(python不都是這樣的麼 )
第三章完結
C Primer Plus 第三章筆記
1.變數名命名需注意 以兩個下劃線或下劃線和大寫字母打頭的名稱被保留給實現使用 以乙個下劃線開頭的名稱被保留給實現,用作全域性識別符號。2.對型別名使用 sizeof 運算子時,應將名稱放在括號中,但對變數名使用時括號可選。3.標頭檔案 climits 定義了符號常量來表示型別的限制。4.若不對函式...
C Primer Plus 第三章 學習
oop的本質是設計並拓展自己的資料型別,即讓型別與資料匹配。c 內建的型別,分為兩組 基本型別,復合型別。基本型別 整數,浮點數 復合型別 陣列,字串,指標和結構。標識儲存的資料的方法 使用變數 3.1簡單變數 程式必須記錄三個基本屬性 1.資訊將儲存在 2.要儲存什麼值 3.儲存何種型別的資訊 宣...
C primer plus第三章筆記
注意位 bit 位元組 byte 的區分.1bite可以為1或0,1b 位元組 256b 位 1kb 1024b.但在有的程式語言中位元組未必包含8位.舉例來講 int a 有以下四種種情況 sizeof a sizeof a sizeof a sizeof a 3.相對於c語言新的初始化方法 in...