c语言:数据类型
整数
-
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是这种类型的位数)
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,原因在于赋值运算优先级高于逗号表达式。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 胖虎同学!
评论