發布時間: Jan. 4, 2023, 5:49 p.m. 最後更新時間: Sept. 14, 2023, 9:41 p.m. 時間限制: 1000ms 記憶體限制: 128M
眾所皆知,在C++裡面有十分多的變數型別,如int, float, double, char, bool等等
還有十分多的修飾語,如long, long long, short, unsigned等等
而副社長就經常因為用錯型別或修飾語而吃WA,所以他決心要搞清楚每種型別的定義
以下為他整理所查到資料得到的總結的一部分
一、型別
1.int
中文為整數,由4個byte存儲,有正負號之分
範圍為$[-2^{31},2^{31}-1]$
如果超過範圍會溢位
並以類似環的概念從$2^{31}-1$變成$-2^{31}$
或從$-2^{31}$變成$2^{31}-1$
用INT_MAX可以取到int的最大值而用INT_MIN可以取到int的最小值(需引入limits.h函式庫)
2.char
中文為字元,由1個byte存儲
存的方法類似整數
只是範圍是$[0,255]$
且取值或輸出時會對應到相對的ascii-code取得字元
ascii表會附在最下面
因為char存的方法類似整數,所以是可以和整數做運算比較的(這似乎要看環境)
3.bool
中文為布林值,由1個byte存儲
但其實只會用一個0或1
所以其實還蠻浪費記憶體空間的
布林值在取值時會回傳true或false
看當時布林值是存0還是1,0為false,1為true
......
二、修飾語(因為通常用在整數上,所以這裡只針對整數)
1.long int
中文是長整數
在某些環境下範圍和整數一模一樣
可是在新一點的環境卻是整數的平方倍
範圍為$[-2^{63},2^{63}-1]$
其餘皆和整數相同
2.long long int
中文為超長整數
範圍必為整數的平方倍
為$[-2^{63},2^{63}-1]$
其餘皆和整數相同
3.short int
中文為短整數
範圍為整數的根號倍
為$[-2^{15},2^{15}-1]$
4.unsigned int
中文為無號整數
顧名思義是沒有分正負號的整數
範圍會把整數負號的部分拿給正數使用
範圍為$[0,2^{32}-1]$
其餘皆和整數相同
5.unsigned long int
中文為無號長整數
顧名思義是沒有分正負號的長整數
範圍會把整數負號的部分拿給正數使用
且一樣在不同的環境範圍可能有差異
範圍為$[0,2^{32}-1]$
或$[0,2^{64}-1]$
其餘皆和長整數相同
6.unsigned long long int
中文為無號超長整數
顧名思義是沒有分正負號的超長整數
範圍會把整數負號的部分拿給正數使用
範圍為$[0,2^{64}-1]$
其餘皆和超長整數相同
7.unsigned short int
中文為無號短整數
顧名思義是沒有分正負號的短整數
範圍會把整數負號的部分拿給正數使用
範圍為$[0,2^{16}-1]$
其餘皆和短整數相同
......
看了那麼多應該也累了,但其實現在副社長遇到解決問題十分簡單,請看輸入描述吧
ascii-code table:
給你一個整數$n$
請輸出最小的無號超長正整數$k$使得以下判斷式為true,若k不存在則輸出-1
判斷式: $n+k == n-k$
本題無範例輸入出
請自己加油吧owo