[关闭]
@yanglt7 2019-02-20T13:15:24.000000Z 字数 5762 阅读 1047

第5周:数据类型

C


5.1.1 数据类型:数据类型

C是有类型的语言

C语言的类型

类型有何不同

sizeof

  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf("sizeof(int)=%ld\n", sizeof(int));
  5. printf("sizeof(double)=%ld\n", sizeof(double));
  6. printf("sizeof(long double)=%ld\n", sizeof(long double));
  7. return 0;
  8. }
  9. sizeof(int)=4
  10. sizeof(double)=8
  11. sizeof(long double)=16
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a;
  5. a = 6;
  6. printf("sizeof(a)=%ld\n", sizeof(a++));
  7. printf("sizeof(a+1.0)=%ld\n", sizeof(a+1.0));
  8. printf("a=%d\n", a);
  9. return 0;
  10. }
  11. sizeof(a)=4
  12. sizeof(a+1.0)=8
  13. a=6

5.1.2 数据类型:整数类型

整数

  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf("sizeof(char)=%ld\n", sizeof(char));
  5. printf("sizeof(short)=%ld\n", sizeof(short));
  6. printf("sizeof(int)=%ld\n", sizeof(int));
  7. printf("sizeof(long)=%ld\n", sizeof(long));
  8. printf("sizeof(long long)=%ld\n", sizeof(long long));
  9. return 0;
  10. }
  11. sizeof(char)=1
  12. sizeof(short)=2
  13. sizeof(int)=4
  14. sizeof(long)=4
  15. sizeof(long long)=8

5.1.3 数据类型:整数的内部表达

整数的内部表达

二进制负数

补码

5.1.4 数据类型:整数的范围

数的范围

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char c = 255;
  5. int i = 255;
  6. printf("c=%d,i=%d\n", c, i);
  7. return 0;
  8. }
  9. c=-1,i=255

unsigned

整数越界

5.1.5 数据类型:整数的格式化

整数的输入输出

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char c = -1;
  5. int i = -1;
  6. printf("c=%u,i=%u\n", c, i);
  7. return 0;
  8. }
  9. c=4294967295,i=4294967295

8进制和16进制

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char c = 012;
  5. int i = 0x12;
  6. printf("c=%d,i=%d\n", c, i);
  7. return 0;
  8. }
  9. c=10,i=18
  1. #include <stdio.h>
  2. int main()
  3. {
  4. char c = 012;
  5. int i = 0x12;
  6. int j = 0x1A;
  7. printf("c=%o,i=%x,j=%X,j=%x\n", c, i, j, j);
  8. return 0;
  9. }
  10. c=12,i=12,j=1A,j=1a

5.1.6 数据类型:选择整数类型

选择整数类型

5.1.7 数据类型:浮点类型

浮点类型

类型 字长 范围 有效数字
float 32 ±(1.20*10^-38~3.40*10^38),0,±inf,nan 7
double 64 ±(2.2*10^-308~1.79*10^308),0,±inf,nan 15

浮点的输入输出

类型 scanf printf
float %f %f,%e
double %lf %f,%e

科学计数法

输出精度

  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf("%.3f\n",-0.0049);
  5. printf("%.30f\n",-0.0049);
  6. printf("%.3f\n",-0.00049);
  7. return 0;
  8. }
  9. -0.005
  10. -0.004899999999999999800000000000
  11. -0.000

5.1.8 数据类型:浮点的范围和精度

超过范围的浮点数

浮点运算的精度

  1. #include <stdio.h>
  2. int main()
  3. {
  4. float a,b,c;
  5. a = 1.345f;
  6. b = 1.123f;
  7. c = a + b;
  8. if (c==2.468)
  9. printf("相等\n");
  10. else
  11. printf("不相等!c=%.10f,或%f\n",c,c);
  12. }
  13. 不相等!c=2.4679999352,或2.468000

选择浮点类型

5.1.9 数据类型:字符类型**

字符类型

字符输入输出

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char c;
  5. char d;
  6. c = 1;
  7. d = '1';
  8. //判断整数和字符是否相等
  9. if (c==d)
  10. printf("相等\n");
  11. else
  12. printf("不相等\n");
  13. //输出c,d
  14. printf("c=%d\n",c);
  15. printf("d=%d\n",d);
  16. //输入%c
  17. char e;
  18. scanf("%c",&e);
  19. printf("e=%d\n",e);
  20. printf("e='%c'\n",e);
  21. return 0;
  22. }
  23. 不相等
  24. c=1
  25. d=49
  26. e=49
  27. e='1'

字符计算

大小写转换

5.1.10 数据类型:逃逸字符

逃逸字符

字符 意义 字符 意义
\b 回退一格 \" 双引号
\t 到下一个表格位 \' 单引号
\n 换行 \ \ 反斜杠本身
\r 回车

制表位

  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf("123\b\n456\n");
  5. printf("123\bA\n456\n");
  6. printf("123\t456\n");
  7. printf("12\t456\n");
  8. return 0;
  9. }
  10. 123
  11. 456
  12. 12A
  13. 456
  14. 123 456
  15. 12 456

5.1.11 数据类型:类型转换

自动类型

强制类型转换

5.2.1 其他运算:逻辑类型

bool

  1. #include <stdbool.h>

5.2.2 其他运算:逻辑运算

运算符 描述 示例 结果
! 逻辑非 !a 如果a是true结果就是false,如果a是false结果就是true
&& 逻辑与 a&&b 如果a和b都是true,结果就是true;否则就是false
ll 逻辑或 a ll b 如果a和b有一个是true,结果为true,两个都是false,结果为false

短路

5.2.3 其他运算:条件运算与逗号运算

条件运算符

逗号运算

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注