翁恺C语言程序设计:学习笔记6(无穷大\计算精度\char\逃逸字符\回车换行与打字机)

  • 无穷大与不存在的数1

    浮点数/0:无穷大(正负);

    0/0:不存在的数;

    整数/0:编译不通过,在C语言中,整数范围内是没有无穷大的,但是浮点数范围内是有无穷大的。

    float有7位有效数字;

    a=1.345f 带有一个f才表示float,不然就是double

    表示相等时尽量不用==,因为精度问题;可以采用fabs(a-b)<1e-12,两者差的绝对值小于很小的数。

  • 计算精度

    当需要计算精确数据时,尽量不要用float,而是扩大基础的int,比如1.23元尽量用123分表示,int是精确的。

  • 整数与浮点数的内部表示

    整数:内部是二进制,所以两个整数可以直接做运算;

    浮点数:内部是编码形式,1个bit用于表示正负,11个bit表示指数部分是多少,后面一些bit表示分数是多少,计算机内部有针对浮点的专用硬件(计算floatdouble的硬件是一样的)。

    floatint,没有特殊需要先用int

    floatdouble,没有特殊需要先用double

  • char

    char是一种整数,也可以看作”字符“。

    每个字符在计算机内部都有一个数值表达它:

    >>> char d = '1';
    >>> printf("d = %d\n", d);
    d=49 // 字符1,在计算机内部是49
    
    • 输入输出得到49,以”字符“输入
      char c;
      scanf("%c", &c);
      printf("c=%c\n", c); 
      printf("c=%d\n",c);
      
    • 输入输出得到49,以”数字“输入
      char c;
      scanf("%d", &c);
      printf("c=%c\n", c); 
      printf("c=%d\n",c);
      

    在程序内部(49 == '1')成立,ASCII对应关系。

  • 读取数据的空格

    scanf("%d %c");
    scanf("%d%c"); // 如果输入中包含空格,会直接把空格当作输入
    
  • 逃逸字符

  • cmd窗口

    这个窗口本身是一个程序,叫做shell

    shell接管了键盘、可视化,我们写的程序是在shell里运行。

    不同的shell会对控制字符\b\n...给出不同反应。

    \b:回去一个,BackSpace。大部分shell对于\b的解释是返回一个,并不删除;

    \t制表位,表示下一位,指的是行中固定的位置,并不是固定的空格大小(数量);

    \n:换行;

    \r:回车;

    回车换行是源自打字机,在打字机上是两个动作。打字机上面随着打字向左边移动的称为“车”,打完一行之后需要把“车”拉回来称为“回车”;而把纸向外推一行称为“换行”。

    一般情况下,shell会把\n直接翻译成“回车”和“换行”两个动作,虽然实际上这是两个动作。

  • C语言中的类型转换

  • 自动类型转换

    如果运算符两边出现不同数据类型,会自动转换成==较大(宽)==的类型。

    char-->short-->int-->long-->longlong;

    int-->float-->double;

  • printf

    对于printf,任何小于int的类型(char、short)会被转换成intfloat会被转换成double

    对于scanf,则不会,要输入short,需要%hd

  • 强制类型转换

    一般是从大强制转换成小的。只是用变量的值计算出一个新的值,但是原来的变量不变。

    (类型)值

    (int)10.2:把10.2转成int类型

  • References


  1. 翁恺, C语言程序设计, [B站], 6.1.8 - 6.1.11 ↩︎

发布了753 篇原创文章 · 获赞 1021 · 访问量 54万+

猜你喜欢

转载自blog.csdn.net/The_Time_Runner/article/details/103856129