类型拓展
c++程序中的每一个类型都是要占用空间的,在OJ中,一旦空间超限,就不好了。因此,我们要知道每一个类型占用多少字节,存储值最多是多少,最少是多少。存储单位是字节(Byte
)
注意有的类型在不同系统使用的字节不同,系统分为32位系统(32-Bit
)和64位系统(64-Bit
)
类型
整型 int //4-Byte (-(2^32)-1~2^32-1)
短整型 short //2-Byte (-(2^16)-1~2^16-1)
长整型 long //32-Bit: 4-Byte 64-Bit: 8-Byte (-(2^32)-1~2^32-1)
双长整型 long long //32-Bit: 4-Byte 64-Bit: 8-Byte (-(2^64)-1~2^64-1)
浮点型 float //4-Byte
长浮点型 double //8-Byte
双长浮点型 long double //16-Byte
字符型 char //1-Byte
宽字符型 wchar_t //2-Byte
布尔型 bool //1-Byte
无符号整型 unsigned //4-Byte (0~(2^32)×2)
有符号整型 signed //4-Byte (和int类型一样)
wchar_t
类型可以存储中文汉字、日语汉字、韩文汉字等特殊字符
bool
类型可以直接理解为if
后填的判断,它是用来存储条件结果的类型,只有false(0)
和true(1)
两个值
类型修饰关键字
unsigned
:一般放在int
,long
,long long
,short
和char
前面,表示这个类型没有负数区域,正数区域是原来的两倍。加了这个修饰符后字节不变。另外后面不填默认为unsigned int
signed
:放在int
,long
,long long
,short
和char
前面没有一点用处,可以代替int
使用,例如signed main()
。另外后面不填默认为signed int
const
:可以加在所有类型的前面,表示这是一个常量。常量是指一个永远不会变的值,因此加上它后,不能改变值,否则报错
宏定义
宏定义是一种在c语言的定义,可以替代代码、设置常量,定义时需放在头文件之后
#define A B //表示用A替代B
#undef A //表示取消宏定义A
宏定义有什么广泛的用处呢?看以下示例
#include <iostream>
#define N 3
using namespace std;
int main() {
int a, b, c, d;
cin >> a >> b >> c >> d;
if(a%N==0)
cout << a << ' ';
if(b%N==0)
cout << b << ' ';
if(c%N==0)
cout << c << ' ';
if(d%N==0)
cout << d << ' ';
return 0;
}
这个程序当输入四个数,随后输出能被3整除的数并用空格分开,这么一看还没有发现什么,但是假如我想直接在代码中改为能够被12345整除呢?这时就可以直接改变值了。又可能会输入20位的数呢?要用到long long
类型,又容易写成int
,怎么办呢?我们可以改变为以下代码
#include <iostream>
#define N 12345 //直接改变
#define int long long //定义int为long long
using namespace std;
signed main() { //这里不能使用int main(),因为int成了宏定义,long long main()要报错
int a, b, c, d; //表面是int类型,实际是long long类型
cin >> a >> b >> c >> d;
if(a%N==0) //直接调用,更方便
cout << a << ' ';
if(b%N==0)
cout << b << ' ';
if(c%N==0)
cout << c << ' ';
if(d%N==0)
cout << d << ' ';
return 0;
}
运用常量可以把第二行改变,注意改变后应放在宏定义之后,如下代码
#include <iostream>
#define int long long //定义int为long long
const int N = 12345; //const定义
using namespace std;
signed main() { //这里不能使用int main(),因为int成了宏定义,long long main()要报错
int a, b, c, d; //表面是int类型,实际是long long类型
cin >> a >> b >> c >> d;
if(a%N==0) //直接调用,更方便
cout << a << ' ';
if(b%N==0)
cout << b << ' ';
if(c%N==0)
cout << c << ' ';
if(d%N==0)
cout << d << ' ';
return 0;
}
点一个赞再走吧