变量的其他知识¶
占几个字节,占多少位¶
常见竞赛环境中,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 查看,得到的是字节数。
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。
运算符优先级¶
下面列出一部分常用运算符,由高到低,同一行的优先级相同。
| 运算 | 符号 |
|---|---|
| 逻辑非、按位取反、正负号 | !、~、一元 +、一元 - |
| 乘、除、取余 | *、/、% |
| 加、减 | +、- |
| 左移、右移 | <<、>> |
| 关系比较 | <、<=、>、>= |
| 相等、不等 | ==、!= |
| 按位与 | & |
| 按位异或 | ^ |
| 按位或 | | |
| 逻辑与 | && |
| 逻辑或 | || |
| 赋值 | =、+=、-= 等 |
注意:<、> 比 ==、!= 的优先级高,不能把它们当成同一级。
这里的括号不能省。x & 1 == 0 会被理解成 x & (1 == 0)。
写代码时,拿不准就加括号,别让读代码的人跟着猜。
unsigned 和 unsigned int 有什么区别¶
疑问,源于CSP-J 2019年初赛,这道试题的第8行代码
unsigned a[maxn];
这是什么东西,不是unsigned int, unsigned char, unsigned short吗?
官方写错了,不能够啊。
肯定是自己无知了。


原来,unsigned 自己独立使用的时候,就是 unsigned int。
这两行是同一种写法,选一行就行。
unsigned 表示无符号,这类整数只能表示非负数。
破案。