跳转至

其他

目标

  • 占几个字节,占多少位的问题
  • 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 的最大值, 2147483647

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);

运算符优先级

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

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

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

unsigned 和 unsigned int 有什么区别

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

unsigned a[maxn];

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

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

img

img

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

参考