03-数据类型——整型、浮点型、字符、字符串、布尔型、常量与变量的解析

03-数据类型

整型、浮点型、字符、字符串、布尔型、常量与变量的解析

一、整型

int a = 0;

注意事项
在32位系统和64位系统中,整型(int)都占用4字节

1.1 取值范围

通过命令行工具getconf可以获取整型的最大值和最小值:

$ getconf INT_MAX
2147483647
$ getconf INT_MIN
-2147483648

1.2 整型的修饰符

short:短整型,用于将整型的尺寸减少为原本的一半,减少内存开支,缩小取值范围。
long:长整型,用于将整型的尺寸变大,增加内存开支,扩大取值范围。
long long:长长整型,用于进一步增加整型的尺寸和取值范围。在64位系统中,long与long long的大小一致。
unsigned:无符号整型,用于去掉符号位,使得整型数据没有负数,扩展正整数的取值范围(0到4294967295)。

1.3 整型数据的符号位

整型数据在二进制存储时,最高位(第31位)表示符号位:

如果符号位为1,则表示负数。
如果符号位为0,则表示正数。

1.4 整数的存储方式

1.4.1 原码

正整数是直接使用原码进行存储的。原码是指整数的绝对值的二进制表示。
例如,整数100的原码表示如下:

100  -->  0000 0000 0000 0000 0000 0000 0110 0100
1.4.2 补码

负数使用补码来存储。补码的计算方法是:取该数的原码的绝对值,取反加1。
符号位(最高位)不变。

例如,-100的补码表示如下:

  1. 计算100的二进制原码:

(注意其实是-100的原码,符号位带上了为1)

100  -->  1000 0000 0000 0000 0000 0000 0110 0100
  1. 取反(符号位保持不变):
取反->  1111 1111 1111 1111 1111 1111 1001 1011
  1. 加1:
加1 ->  1111 1111 1111 1111 1111 1111 1001 1100

所以,-100的补码表示为:

1111 1111 1111 1111 1111 1111 1001 1100
1.4.3 溢出

当整数运算的结果超过其取值范围时,会发生溢出。溢出后的结果会变成相邻的最小值或最大值

例如,对于32位有符号整数(int):

  • 最大值是2147483647(0111 1111 1111 1111 1111 1111 1111 1111
  • 最小值是-2147483648(1000 0000 0000 0000 0000 0000 0000 0000

如果将最大值加1,则会溢出为最小值:

2147483647 + 1 = -2147483648
1.4.4 示例

以下示例代码演示了正整数和负整数的存储方式及溢出情况:

#include <stdio.h>
#include <limits.h>

int main() {
   
   
    int positive = 100;
    int negative = -100;

    printf("正整数 %d 的二进制表示(原码):%x\n", positive, positive);
    printf("负整数 %d 的二进制表示(补码):%x\n", negative, negative);

    // 演示溢出
    int max_int = INT_MAX;
    int min_int = INT_MIN;
    printf("最大整型值: %d\n", max_int);
    printf("最小整型值: %d\n", min_int);
    printf("最大整型值加1(溢出):%d\n", max_int + 1);
    printf("最小整型值减1(溢出):%d\n", min_int - 1);

    return 0;
}

输出结果

正整数 100 的二进制表示(原码):64
负整数 -100 的二进制表示(补码):ffffff9c
最大整型值: 2147483647
最小整型值: -2147483648
最大整型值加1(溢出):-2147483648
最小整型值减1(溢出):2147483647

二、浮点型(实型)

概念:浮点型用于表达一个实数的数据类型。

2.1 分类

  1. 单精度浮点型(float
    • 典型尺寸:4字节
  2. 双精度浮点型(double
    • 典型尺寸:8字节
  3. 长双精度浮点型(long double
    • 典型尺寸:16字节

占用的内存越多,则精度越高。但是注意是经典尺寸,在不同系统中可能不同。

2.2 浮点数的存储

IEEE 754浮点数标准采用如下形式来表示一个浮点数:
在这里插入图片描述

  • 单精度浮点数(32位)
    • 符号位(S):1位
    • 指数位(E):8位
    • 尾数位(M):23位
  • </
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写的什么石山代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值