zoukankan      html  css  js  c++  java
  • 数据类型

    1. C是有类型的语⾔

    C语⾔的变量,必须:

    在使⽤前定义,并且

    确定类型

    C以后的语⾔向两个⽅向发展:

    C++/Java更强调类型,对类型的检查更严格

    JavaScript、Python、PHP不看重类型,甚⾄不需 要事先定义

    2.类型安全

    ⽀持强类型的观点认为明确的类型有助于尽早发现程 序中的简单错误

     反对强类型的观点认为过于强调类型迫使程序员⾯对 底层、实现⽽⾮事务逻辑

    总的来说,早期语⾔强调类型,⾯向底层的语⾔强调 类型 • C语⾔需要类型,但是对类型的安全检查并不⾜够

    3. C语⾔的类型

    4. 类型有何不同

    类型名称:int、long、double

    输⼊输出时的格式化:%d、%ld、%lf

    所表达的数的范围:char < short < int < float < double

    内存中所占据的⼤⼩:1个字节到16个字节

    内存中的表达形式:⼆进制数(补码)、编码

    5. sizeof

    是⼀个运算符,给出某个类型或变量在内存中所占据 的字节数

    • sizeof(int)

    • sizeof(i)

    6. sizeof

    是静态运算符,它的结果在编译时刻就决定了

    不要在sizeof的括号⾥做运算,这些运算不会做的

    7. 整数

    char

    short

    int

    long

    long long

    8.整数

    char:1字节(8⽐特)

    short:2字节

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

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

    long long:8字节

    9. *整数的内部表达

    计算机内部⼀切都是⼆进制

    • 18 —> 00010010

    • 0 —> 00000000

    • -18 —> ?

    10. *如何表⽰负数

    ⼗进制⽤“-”来表⽰负数,在做计算的时候

    • 加减是做相反的运算

    • 乘除时当作正数,计算完毕后对结果的符号取反

    11. *⼆进制负数

    1个字节可以表达的数:

    00000000 — 11111111 (0-255)

    • 三种⽅案:

    1. 仿照⼗进制,有⼀个特殊的标志表⽰负数

    2. 取中间的数为0,如1000000表⽰0,⽐它⼩的是 负数,⽐它⼤的是正数

    3. 补码

    12. *补码

    考虑-1,我们希望-1 + 1 —> 0。如何能做到?

    • 0 —> 00000000
    1.  1 —> 00000001
    2. 11111111 + 00000001 —> 100000000
    •  因为0 - 1 —> -1,所以,-1 =
    1.  (1)00000000 - 00000001 —> 11111111
    2. 11111111被当作纯⼆进制看待时,是255,被当作补码看待时是 -1
    3.  同理,对于-a,其补码就是0-a,实际是2n - a,n是这种类型的位数

    13. 数的范围

    • 对于⼀个字节(8位),可以表达的是:
    1. 00000000 - 11111111
    •  其中
    1. 00000000 —> 0
    2. 11111111 ~ 10000000 —> -1 ~ -128
    3. 00000001 ~ 01111111 —> 1 ~ 127

    14. 整数的范围

    char:1字节:-128 ~ 127

    short:2字节:-32768 ~ 32767

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

    long:4字节

    long long:8字节

    15. unsigned

    • 在整形类型前加上unsigned使得它们成为⽆符号的整 数
    • 内部的⼆进制表达没变,变的是如何看待它们
    1. 如何输出
    • 11111111
    1. 对于char,是-1
    2. 对于unsigned char,是255

    16. unsigned

    如果⼀个字⾯量常数想要表达⾃⼰是unsigned,可以 在后⾯加u或U

    255U

    ⽤l或L表⽰long(long)

    *unsigned的初衷并⾮扩展数能表达的范围,⽽是为 了做纯⼆进制运算,主要是为了移位

    17. 整数越界

    整数是以纯⼆进制⽅式进⾏计算的,所以:

    • 11111111 + 1 —> 100000000 —> 0
    •  01111111 + 1 —> 10000000 —> -128
    •  10000000 - 1 —> 01111111 —> 127

    18. 整数的输⼊输出

    只有两种形式:int或long long

    %d:int

    %u:unsigned

    %ld:long long

    %lu:unsigned long long

    19. 8进制和16进制

    ⼀个以0开始的数字字⾯量是8进制

    ⼀个以0x开始的数字字⾯量是16进制

    %o⽤于8进制,%x⽤于16进制

    8进制和16进制只是如何把数字表达为字符串,与内 部如何表达数字⽆关

    20. 选择整数类型

    • 为什么整数要有那么多种?
    1. 为了准确表达内存,做底层程序的需要
    • 没有特殊需要,就选择int
    1. 现在的CPU的字⻓普遍是32位或64位,⼀次内存读写就是 ⼀个int,⼀次计算也是⼀个int,选择更短的类型不会更 快,甚⾄可能更慢
    2. *现代的编译器⼀般会设计内存对⻬,所以更短的类型实 际在内存中有可能也占据⼀个int的⼤⼩(虽然sizeof告诉 你更⼩)
    •  unsigned与否只是输出的不同,内部计算是⼀样的

    21. 浮点数

    22. 浮点的输⼊输出

    23. 科学计数法

    24. 输出精度

    在%和f之间加上.n可以指定输出⼩数点后⼏位,这样 的输出是做4舍5⼊的

    printf("%.3f\n", -0.0049);

    printf("%.30f\n", -0.0049);

    printf("%.3f\n", -0.00049);

    25. 超过范围的浮点数

    printf输出inf表⽰超过范围的浮点数:±∞ 

    printf输出nan表⽰不存在的浮点数

    26. 浮点运算的精度

    27. *浮点数的内部表达

    浮点数在计算时是由专⽤的硬件部件实现的

    计算double和float所⽤的部件是⼀样的

    28. 选择浮点类型

    如果没有特殊需要,只使⽤double

    现代CPU能直接对double做硬件运算,性能不会⽐ float差,在64位的机器上,数据存储的速度也不⽐ float慢

    29. 字符类型

    char是⼀种整数,也是⼀种特殊的类型:字符。这是 因为:

    ⽤单引号表⽰的字符字⾯量:'a', '1'

    ''也是⼀个字符

    printf和scanf⾥⽤%c来输⼊输出字符

    30. 字符的输⼊输出

    如何输⼊'1'这个字符给char c?

    scanf("%c", &c);—>1

    scanf("%d", &i); c=i; —>49

    '1'的ASCII编码是49,所以当c==49时,它代表'1'

    printf("%i %c\n", c,c ); • ⼀个49各⾃表述!

    31. 混合输⼊

    有何不同?

    • scanf("%d %c", &i, &c);

    • scanf("%d%c", &i, &c);

    32. 字符计算

    ⼀个字符加⼀个数字得到ASCII码表中那个数之后的 字符

    两个字符的减,得到它们在表中的距离

    33. ⼤⼩写转换

    字⺟在ASCII表中是顺序排列的

    ⼤写字⺟和⼩写字⺟是分开排列的,并不在⼀起

    ‘a’-‘A’可以得到两段之间的距离,于是

    a+’a’-‘A”可以把⼀个⼤写字⺟变成⼩写字⺟,⽽

    a+’A’-‘a’可以把⼀个⼩写字⺟变成⼤写字⺟

    34. 逃逸字符

    ⽤来表达⽆法印出来的控制字符或特殊字

    35. 回⻋换⾏

    36. 制表位

    每⾏的固定位置

    ⼀个\t使得输出从下⼀个制表位开始

    ⽤\t才能使得上下两⾏对⻬

    37. 逻辑类型

    bool

    #include

     之后就可以使⽤bool和true、false

    bool的运算

    • bool实际上还是以int的⼿段实现的,所以 可以当作int来计算

    • 也只能当作int来输⼊输出

    类型转换

    ⾃动类型转换

    当运算符的两边出现不⼀致的类型时,会⾃动转换成 较⼤的类型

    • ⼤的意思是能表达的数的范围更⼤

    • char —> short —> int —> long —> long long

    • int —> float —> double

    ⾃动类型转换

    对于printf,任何⼩于int的类型会被转换成int;float会 被转换成double

    • 但是scanf不会,要输⼊short,需要%hd

    强制类型转换

    要把⼀个量强制转换成另⼀个类型(通常是较⼩的类 型),需要:

    (类型)值

    ⽐如:

    • (int)10.2 • (short)32

    • 注意这时候的安全性,⼩的变量不总能表达⼤的量

    • (short)32768

    强制类型转换

    JavaScript、Python、PHP不看重类型,甚⾄不需 要事先定义

  • 相关阅读:
    iis里不能同时启动多个站点的原因总结:
    相机200万提升到300万的软件技术插值法
    nginx与PHP的安装配置
    IIS和apache都要同时使用80端口的解决办法
    nginx安装与配置
    只写一个表单,可以达到两个表单的效果
    nginx伪静态规则
    伪静态涉及到的重复页面之属性canonical
    ckeditor与ckfinder组合配置
    上传图片的美化
  • 原文地址:https://www.cnblogs.com/hechunfeng/p/15696196.html
Copyright © 2011-2022 走看看