C语言深度扩展——1. 数据类型及关键字(上)

(1). 基本数据类型

  1. 数据类型可以理解为固定内存大小的别名,创建变量的模子
    Alt
  2. 变量本质
    Alt
  3. 范例
    Alt

(2). 有符号与无符号

  1. 有符号

    1. 数据类型的最高位用于表示数据的符号

      • 最高位为1,表明这个数是负数

      • 最高位为0,表明这个数为正数

    2. 在计算机内部用补码表示有符号数

      • 正数的补码为正数本身

      • 负数的补码为负数的绝对值各位取反后加1

  2. 无符号

    1. 在计算机内部用原码表示无符号数

      • 无符号数默认为正数

      • 无符号数没有符号位

    2. 对于固定长度的无符号数

      • MAX_VALUE + 1 -> MIN_VALUE

      • MIN_VALUE - 1 -> MAX_VALUE

  3. signed 和 unsigned

    1. C语言中默认是有符号类型

    2. unsigned关键字声明变量为无符号类型

    3. C语言中只有整数类型能够声明unsigned变量

  4. 范例:

    1. 当无符号 ( unsigned ) 遇到有符号 ( signed )

        当无符号数与有符号数混合计算时,会将有符号数转换为无符号数后再进行计算,结果为无符号数
      Alt

    2. 错误地使用了 unsigned
      Alt

(3). 浮点数

  1. 内存中的浮点数

      浮点数在内存的存储方式为:符号位,指数,尾数

    类型 符号位 指数 尾数
    float 1位(第31位) 8位(第23-30位) 23位(第0-22位)
    double 1位(第63位) 11位(第52-62位) 52位(第0-51位)

      float 和 double 类型的数据在计算机内部的表示法是相同的,但由于所占存储空间不同,其分别能够表示的数值范围和精度不同。

  2. 浮点数存储示例

    1. 浮点数的转换步骤:

      1. 将浮点数转换成二进制

      2. 用科学计数法表示二进制浮点数

      3. 计算指数偏移后的值

        注意:
        计算指数时需要加上偏移量,而偏移量的值与类型相关.

        示例:对于指数 6,偏移后的值如下:

          float: 127 + 6 -> 133

          double: 1023 + 6 -> 1029

    2. 10进制浮点数的内存表示

        实数 8.25 在内存中 float 表示:

      1. 8.25 转换成二进制表示: 1000.01 -> 1.00001 * (2^3)

          符号位: 0

          指数: 127 + 3 -> 130 -> 10000010

          小数:00001

      2. 内存中的8.25的float表示:

          0 10000010 00001000000000000000000 -> 0x41040000
        Alt

  3. 浮点类型的秘密

    1. int类型范围 [-2^31, 2^31 - 1],float类型范围 [-3.4 * (10^38), 3.4 * (10^38)]

    2. float能表示的具体数字的个数与int相同

    3. float可表示的数字之间不是连续的,存在间隙

    4. float只是一种近似的表示法,不能作为精确数使用

    5. 由于内存表示法相对复杂,float的运算速度比int慢的多

    注意:
      double 与 float 具有相同的内存表示法,因此 double 也是不精确的。由于 doubl 占用的内存较多,所能表示的精度比 float 高。

    Alt

(4). 属性关键字(auto、register、static)

  C 语言中的变量可以有自己的属性,在定义变量时可以加上“属性”关键字,用于指明变量具有有特殊意义。

  1. auto

      C 语言中局部变量的默认属性,编译器默认

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值