跳转至

变量类型,运算符优先级

前置知识

目标

  • 占几个字节,占多少位的问题
  • unsigned int,你是否见过 unsigned
  • 常用的ASCII码,char 其实是特殊的整数类型
  • 运算符优先级,如果你分不清 x = (x | x << 2) & 0x33 计算顺序

占几个字节,占多少位

int类型4字节32
short类型2字节16
char类型1字节8
bool类型1个字节8

由于历史原因C++ 中布尔类型和字符类型会被视作特殊的整型

整数类型一般按位宽有 5 个梯度char short int long long long
char8
short16
int32
long32
long long64

字符类型charsigned charunsigned char
实际上底层存储方式仍然是整数一般通过 ASCII 编码 实现字符与整数的一一对应
一般来说 signed charunsigned char 不应用来存储字符绝大多数情况下这两种类型均被视作整数类型

C++17 起在 <limits> 中提供了 std::numeric_limits 类模板
std::numeric_limits<int32_t>::max();  // int32_t 的最大值, 2'147'483'647

float单精度浮点数精度位数69
double双精度浮点数精度位数1517
写代码时一般使用double

int double string 之间的转换

// string 转换成 int
string s = "1234";
int x = stoi(s);

// C 风格字符串(C-string)转换成 double
scanf("%s", s);
double x = atof(s);

// Parses the C-string str interpreting its content as an integral number, which is returned as a value of type int.
int x = atoi(s);

ASCII码

ASCII码是美国信息交换标准委员会制定的 7 位二进制码,共有128个字符。

ASCII码由7个二进制位组成,为了提高信息传输的可靠性,通常增加一个校验位。这样,一个字符就可以用 8 位二进制代码表示了。

主要的需要记忆的ASCII码:

'a' 97

'A' 65

'0' 48

'=' 32

运算符优先级

简要记忆,由高到低,分别是

  • 乘除模运算 *, /, %
  • 加减 +, -
  • 左移 右移 <<, >>
  • 比较大小 <, >, ==, !=
  • 按位与 &
  • 按位异或 ^
  • 按位或 |
  • 逻辑与 &&
  • 逻辑或 ||

写代码时,建议加括号保证运算顺序的正确性。

unsigned 和 unsigned int 有什么区别

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

unsigned a[maxn];

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

官方写错了,不能够啊。肯定是自己无知了。

img

img

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

参考