整数

  • char:1字节(8比特) -128~127

  • short:2字节 -32768~32767

  • int:取决于编译器(CPU),通常意义是“1个字”

  • long:取决于编译器(CPU),通常意义是“1个字”

  • long long:8字节

整数的内部表达都是二进制

补码

补码的意义就是拿补码和原码可以加出一个溢出的“零”

0-1=-1
(1)00000000 - 00000001 --> 11111111
11111111被看作纯二进制看待时,是255,被当作补码看待时是-1
同理,-a的补码是0-a,实际上是 (n是这种类型的位数)

2na2^n-a

8进制和16进制:

  • 一个以0开始的数字字面量是8进制
  • 一个以x开始的数字字面量是16进制
  • %0用于8进制,%x用于16进制
  • 8进制和16进制只是如何把数字表达为字符串,与内部如何表达数字无关

浮点数

类型 字长 有效数字 scanf printf
float 32 7 %f %f,%e
double 64 15 %lf %f,%e
  • 输出精度:在%和f之间加上.n可以指定输出小数点后几位,输出是4舍5入的

printf(“%.3f\n”,-0.0056); —> 输出结果为-0.006

  • float需要用f或F后缀来表明身份,带小数点的字面量默认是double

  • 自动类型转换:当运算符两边出现不一致的类型时,会自动转换成较大(数的范围打)的类型

char–>short–>int–>long–>long long

int–>float–>double

  • 强制类型转换:(类型)值 如(int)6.66表示把float转换成int

逻辑运算

运算符 描述 示例 结果
逻辑非 !a a=1,!a=0
&& 逻辑与 a&&b 如果a和b都是true,结果才是true;否则就是false
|| 逻辑或 a||b 如果a和b有一个是true,结果就是true。

运算符优先级

优先级 运算符 结合性
1 () 从左到右
2 ! + - ++ – 从右到左(单目的+和-)
3 */% 从左到右
4 ± 从左到右
5 < <= > >= 从左到右
6 == != 从左到右
7 && 从左到右
8 || 从左到右
9 = += -+ *= /= %= 从右到左
  • 对于&&,左边是false时就不做右边了;对于||,左边是true时就不做右边了。

逗号表达式

优先级别最低,它将两式联接起来,如:(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,如:(3+5,6+8)的值是14,(a=20/4,a*4)的值是20,原因在于赋值运算优先级高于逗号表达式。