跳到主要内容

变量 & 运算

参考资料

变量范围

变量类型字节最大值最小值
bool111100
char11CHAR_MAXCHAR_MIN
signed char11127127
SCHAR_MAX
128-128
SCHAR_MIN
unsigned char11255255
UCHAR_MAX
00
short223276732767
SHRT_MAX
32768-32768
SHRT_MIN
unsigned short226553565535
USHRT_MAX
00
int4421474836472147483647
INT_MAX
2147483648-2147483648
INT_MIN
unsigned int4442949672954294967295
UINT_MAX
00
long4/84/8LONG_MAXLONG_MIN
long long8892233720368547758079223372036854775807
LLONG_MAX
9223372036854775808-9223372036854775808
LLONG_MIN
unsigned long long881844674407370955161518446744073709551615
ULLONG_MAX
00
float443.40282×10383.40282\times 10^{38}
FLT_MAX
1.17549×10381.17549\times 10^{-38}
FLT_MIN
double881.79769×103081.79769\times 10^{308}
DBL_MAX
2.22507×103082.22507\times 10^{-308}
DBL_MIN
long double16161.18973×1049321.18973\times 10^{4932}
LDBL_MAX
3.3621×1049323.3621\times 10^{-4932}
LDBL_MIN

运算符优先级表

第一级别

运算符描述示例可重载性
::作用域解析符Class::age = 2;

第二级别

运算符描述示例可重载性
++后自增运算符for (int i = 0; i < 10; i++) cout << i;
--后自减运算符for (int i = 10; i > 0; i--) cout << i;
type() type{}强制类型转换unsigned int a = unsigned(3.14);
()函数调用isdigit('1')
[]数组数据获取array[4] = 2;
.对象型成员调用obj.age = 34;
->指针型成员调用ptr->age = 34;

第三级别

运算符描述示例可重载性
++前自增运算符for (i = 0; i < 10; ++i) cout << i;
--前自减运算符for (i = 10; i > 0; --i) cout << i;
+正号int i = +1;
-负号int i = -1;
!逻辑取反if (!done) …
~按位取反flags = ~flags;
(type)C 风格强制类型转换int i = (int) floatNum;
*指针取值int data = *intPtr;
&值取指针int *intPtr = &data;
sizeof返回类型内存int size = sizeof floatNum; int size = sizeof(float);
new动态元素内存分配long *pVar = new long; MyClass *ptr = new MyClass(args);
new []动态数组内存分配long *array = new long[n];
delete动态析构元素内存delete pVar;
delete []动态析构数组内存delete [] array;

第四级别

运算符描述示例可重载性
.*类对象成员引用obj.*var = 24;
->*类指针成员引用ptr->*var = 24;

第五级别

运算符描述示例可重载性
*乘法int i = 2 * 4;
/除法float f = 10.0 / 3.0;
%取余数(模运算)int rem = 4 % 3;

第六级别

运算符描述示例可重载性
+加法int i = 2 + 3;
-减法int i = 5 - 1;

第七级别

运算符描述示例可重载性
<<位左移int flags = 33 << 1;
>>位右移int flags = 33 >> 1;

第八级别

运算符描述示例可重载性
<=>三路比较运算符if ((i <=> 42) < 0) ...

第九级别

运算符描述示例可重载性
<小于if (i < 42) ...
<=小于等于if (i <= 42) ...
>大于if (i > 42) ...
>=大于等于if (i >= 42) ...

第十级别

运算符描述示例可重载性
==等于if (i == 42) ...
!=不等于if (i != 42) ...

第十一级别

运算符描述示例可重载性
&位与运算flags = flags & 42;

第十二级别

运算符描述示例可重载性
^位异或运算flags = flags ^ 42;

第十三级别

运算符描述示例可重载性
|位或运算flags = flags | 42;

第十四级别

运算符描述示例可重载性
&&逻辑与运算if (conditionA && conditionB) ...

第十五级别

运算符描述示例可重载性
||逻辑或运算if (conditionA || conditionB) ...

第十六级别

运算符描述示例可重载性
? :条件运算符int i = a > b ? a : b;
throw异常抛出throw EClass("Message");
=赋值int a = b;
+=加赋值运算a += 3;
-=减赋值运算b -= 4;
*=乘赋值运算a *= 5;
/=除赋值运算a /= 2;
%=模赋值运算a %= 3;
<<=位左移赋值运算flags <<= 2;
>>=位右移赋值运算flags >>= 2;
&=位与赋值运算flags &= new_flags;
^=位异或赋值运算flags ^= new_flags;
|=位或赋值运算flags |= new_flags;

第十七级别

运算符描述示例可重载性
,逗号分隔符for (i = 0, j = 0; i < 10; i++, j++) ...
提示

表中并未列出 const_caststatic_castdynamic_castreinterpret_casttypeidsizeof...noexceptalignof 等运算符,因为它们的使用形式与函数调用相同,不会出现歧义。

常见写法

奇偶性判断

7 Bcpp
if(x&1)

平均值计算

15 Bcpp
int mid=l+r>>1;

二进制拆分

6 Bcpp
i>>j&1