翁恺C语言程序设计:学习笔记5

  • 整数的输入输出1

    数据类型有很多:char、int、long、long long…

    但在输入输出格式化时,只有两种:

    • %dint
    • %ldlong long

    变换看待方式,还有unsigned

    • %uunsigned
    • %luunsigned long long

    在计算机内部,一串字符在现实中表示什么取决于用什么样的方式去看待它,比如%d%u同样输出同一个位串,会不一样。

  • 八进制与十六进制

    字面量,是在编译器编写界面里的内容,可以有比如012表示8进制,编译器会自动将其转成10进制,但是这是编译器这个层面的事情,在计算机底层只有2进制

    • 8进制

      0开头的数字字面量

    • 16进制

      0x开头的数字字面量

      一个4位的二进制,刚好是一个16进制

    进制 字面量 输入输出格式化
    2进制 字面量并不会直接写二进制
    8进制 0开头 %o、%O
    10进制 正常数字 %d、%ld
    16进制 0x开头 %x、%X
  • 整数类型的选择

    C语言有很多整数类型,因为设计之初,需要考虑到跟硬件打交道,位数不同是适应不同硬件配置。

    当下,尽量默认选择int作为整数。因为当下计算机已经默认了32位,即便是使用charshort类型,实际调用中可能基于内存对齐,速度反而更慢。

    unsigned只是作用于输出过程,没有热别需要也不使用。

  • 浮点数

    浮点数有两种:

    • float
    • double
    类型 输入输出格式化 字长 范围 有效数字 备注
    float scanf:%f;
    printf:
    %f,
    %.16f(小数点后16位,四舍五入),
    %e(科学记数法),%E(大写)
    32(4个字节) ± ( 1.2 1 0 38 , 3.4 1 0 38 ) , 0 , ± i n f , n a n \pm(1.2*10^{-38} , 3.4*10^{38}),0,\pm inf,nan 7 0左右很小区域内,是无法表达的
    double scanf:%lf;
    printf:%lf,%e(科学记数法),%E
    64 ± ( 3.2 1 0 308 , 1.79 1 0 308 ) , 0 , ± i n f , n a n \pm(3.2*10^{-308} , 1.79*10^{-308}),0,\pm inf,nan 15 0左右很小区域内,是无法表达的

    nan:不是有效的数字

    有效数字:*7(15)个数字是有效的,第8(16)*个就是不准确的。

    浮点数有精度,数字本质上连续的,但是计算机只能通过离散数来表示一个准确的数,实际上计算机内部不能准且表示,double相比于float精度更高,能表示的更准确,但依然是个近似值。

  • References


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

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

猜你喜欢

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