数据类型与取值范围

数据类型和取值范围

1.数据类型

在这里插入图片描述

1.1 整数类型

  • short int (一般情况占2个字节大小)
  • int (一般情况占4个字节大小)
  • long int (一般情况占4个字节大小)
  • long long int (一般情况占8个字节大小)

注:

  1. short int <= int <= long int <= long long int

  2. 例:long int已经可以存放足够大的整数了,如果需要存放更大的整数,那么就要使用long long int

    Data modelshortintlonglong longpointers/size_t
    LLP64/IL32P641632326464
    LP64/I32LP641632646464
    ILP641664646464
    SILP646464646464

1.2 浮点数类型

  • float
  • double
  • long double

1.3 字符类型

  • char

注:

  1. char类型可以看作特殊的整型
  2. char字符型占用一个字节的空间,中文字符在不同的操作环境和编译器中占用不同大小的字节
  3. char类型在计算机中是按其ASCII码进行存储,ASCII是“整型”类数据,在内存中全部以补码形式存储

1.4 布尔类型

  • C标准规范存储空间最小的是 _Bool,因为只要求能足够容纳0和1两个数即可

1.5 sizeof运算符

  • sizeof运算符用于获得数据类型或表达式的长度

  • 有以下三种格式

    ——sizeof(对象)

    ——sizeof(类型)

    ——sizeof 对象

问:sizeof是一个函数吗?
答:不是,虽然其后面有一个小括号,可填入参数,但sizeof只是一个特殊的操作符

1.6 signed和unsigned

  • signed 和 unsigned 为类型限定符(用于限定char和任意整型的符号类型)

  • 格式为:

    ——[signed] short [int] ——unsigned short [int]

    ——[signed] int ——unsigned int

    ——[signed] long [int] ——unsigned long [int]

    ——[signed] long long [int] ——unsigned long long [int]

注:

  1. 一般整数类型默认为有符号类型
  2. 而字符类型根据不同环境和不同编译器可能为有符号类型也可能为无符号类型
问: unsigned intint 哪个可以表示更大的整数
答:默认 intsigned 的,即带符号的整数,需要用一半的存储空间来存放负数,而 unsigned int 则是完全用于存放正数,因此 unsigned int 可表示更大的整数

2.取值范围

2.1 比特位

  • 比特位(bit,b):CPU能读懂的最小单位

2.2 字节

  • 字节(Byte,B):内存中的最小寻址单位
  • 1Byte = 1bite
二进制十进制十六进制
000
1022
1133
10044
10155
11066
11177
100088
100199
101010A
101111B
11111111255FF

所以一个字节一般能存放最大整数为255

但如果字节中第一个比特位为符号位,则能存放的最大整数为127

  1. 存放signed类型的存储单元中第一位表示符号位,如果该位为0,则表示该整数是一个正数;如果该位为0,则表示该整数是一个负数
  2. 事实上计算机是用补码的形式来存放整数的值(不论正数还是负数)

2.3补码

补码是什么:一个数在计算机中是以二进制的形式存放的,补码的发明是为了表示带符号数

  1. 正数的补码就是该数的二进制形式

  2. 负数的补码需要通过以下几步获得:

    • 先获得该数的绝对值的二进制形式,但第一符号位为1
    • 再将其除符号位之外按位取反
    • 最后再加一
    例1:
    10000111

    为 7的在计算机中的存储形式,前面第一位代表符号位(实际应为三十二个比特位,这里只是大概表示)

    进行补码:
    11111000
    11111001

    这就为-7在计算机中的存储形式(实际应为三十二个比特位,这里只是大概表示)

2.4 基本数据类型的取值范围

数据类型字节数取值范围
char1-128 ~ 127
unsigned char10 ~ 255
short2-32768 ~ 32767
unsigned short20 ~ 65535
int4-2147483648 ~ 2147483647
unsigned int40 ~ 4294967295
long4-2147483648 ~ 2147483647
unsigned long40 ~ 4294967295
long long8-9223372036854775808 ~ 9223372036854775807
unsigned long long80 ~ 18446744073709551615
float41.17549 * 10 ^-38 ~ 3.40282 * 10 ^ 38(绝对值)
double82.22507 * 10 ^ -308 ~ 1.79769 * 10 ^308(绝对值)
long double122.22507 * 10 ^ -308 ~ 1.79769 * 10 ^308(绝对值)
问:为什么一个有符号字节储存的正数最大为127,而储存的负数最大值为-128
答:因为正数需要多一位来存放0
  • 9
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值