關于幾個型別的范圍
int -2147483647-2147483648 -2^31~2^31-1
long -2147483647~2147483648 -2^31~2^31-1 (和int相等)
unsigned long long 0~18446744073709551615 0~2^64-1
unsigned int 0~4294967295 0~2^32-1
unsigned long 0~4294967295 0~2^32-1
long long的最大值:-9223372036854775808 ~ 9223372036854775807 -2^63,2^63-1
0x3f3f3f3f與0x7fffffff的意義
當使用min等函式的時候,會需要定義無窮大,一般會有兩個選擇:0x7fffffff和0x3f3f3f3f
(1) 0x7fffffff
首先了解數字的含義,"0x"是一個前綴,表示十六進制,
而"7"在二進制中是7的二進制碼為 0111,f是指1111,
這樣, 0x7FFFFFFF 的二進制表示就是除了符號位是 0表示正數,其余都是1,
對于int而言,0x7fffffff是最大的數值,
所以可以把需要比較的無窮大設為0x7fffffff再進行比較,
但是對于寫代碼還有一個更合適的數值,就是
(2) 0x3f3f3f3f
在實際寫代碼的時候,有的時候并不會出現接近于2^31這樣的數值,因此可以把無窮大設得小一點,一般設為0x3f3f3f3f,
0x3f3f3f3f的數值為1061109567,它的兩倍也只有2122219134,不會溢位,
這樣就有一個好處,當兩個無窮大相加的時候可以使int型整數不溢位,并使數值仍為無窮大,
而使用0x3f3f3f3f在對于陣列定義的時候也比較方便,一般陣列批量賦值時會使用memset函式,如果想將一個陣列全部定義為"無窮大"的0x3f3f3f3f,因為memset函式是對位元組進行操作,而0x3f3f3f3f的每個位元組都是0x3f,所以可以直接定義為
memset(陣列名,0x3f,sizeof(陣列名));
特別的,浮點數陣列如double,float初始化為正無窮應使用
memeset(陣列名,127,sizeof(陣列名));
占位符型別
%c ASCII 字符
%f 浮點數
%p 指標
%u 無符號十進制整數(unsigned int)
%s 字串
%d 整數轉成十進位
%o 整數轉成八進位
%x 整數轉成小寫十六進位
%X 整數轉成大寫十六進位
%e 浮點數、e-記數法
%g 自動舍去小數點后多余0
%G 根據數值不同自動選擇%f或%e
%i 有符號十進制數(與%d相同)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/40802.html
標籤:C++
