跳转至

变量的其他知识

占几个字节,占多少位

常见竞赛环境中,1 字节是 8 位,各类型通常占用:

类型 字节数 位数
char 1 8
bool 1 8
short 2 16
int 4 32
long long 8 64
float 4 32
double 8 64

这是常见情况,不是所有环境都一样。

long 尤其要注意:64 位 Windows 中通常是 4 字节,64 位 macOS、Linux 中通常是 8 字节。

不确定时,用 sizeof 查看,得到的是字节数。

cout << sizeof(int);       // 常见环境输出4
cout << sizeof(long long); // 常见环境输出8

char 按定义占 1 字节;bool 虽然只有真假两种值,也不代表只占 1 位。

整数类型

标准有符号整数类型有 signed char、short、int、long、long long,各有对应的无符号类型。

char、bool 也属于整型。

char、signed char、unsigned char 是三个不同的类型,大小都是 1 字节。

存字符,一般用 char。char 能不能表示负数,由编译环境决定。

浮点类型

float 是单精度浮点型,常见环境中约有 6~7 位十进制有效数字。

double 是双精度浮点型,常见环境中约有 15~16 位十进制有效数字。

注意是有效数字,不是小数点后有几位。123.45 有 5 位有效数字。

写代码时,一般使用 double。

运算符优先级

下面列出一部分常用运算符,由高到低,同一行的优先级相同。

运算 符号
逻辑非、按位取反、正负号 !、~、一元 +、一元 -
乘、除、取余 *、/、%
加、减 +、-
左移、右移 <<、>>
关系比较 <、<=、>、>=
相等、不等 ==、!=
按位与 &
按位异或 ^
按位或 |
逻辑与 &&
逻辑或 ||
赋值 =、+=、-= 等

注意:<、> 比 ==、!= 的优先级高,不能把它们当成同一级。

int x = 6;
cout << ((x & 1) == 0); // 判断偶数,输出1

这里的括号不能省。x & 1 == 0 会被理解成 x & (1 == 0)。

写代码时,拿不准就加括号,别让读代码的人跟着猜。

unsigned 和 unsigned int 有什么区别

疑问,源于CSP-J 2019年初赛,这道试题的第8行代码

unsigned a[maxn];

这是什么东西,不是unsigned int, unsigned char, unsigned short吗?

官方写错了,不能够啊。

肯定是自己无知了。

img

im g

原来,unsigned 自己独立使用的时候,就是 unsigned int。

// 两种写法,选一种
unsigned a[maxn];
// unsigned int a[maxn];

这两行是同一种写法,选一行就行。

unsigned 表示无符号,这类整数只能表示非负数。

破案。