C语言笔记——取值范围

C语言笔记——取值范围

前言

这章主要是留作备用,作为补充知识的吧,不过常用的数据类型的取值范围还是得做一下了解,并且记住的。
这里得先明确几个个概念:

CPU能读懂的最小单位是:比特位,单位:bit,简写为:b
内存中最小的寻址单位为:字节,单位:Byte,简写为:B
有这样一个关系:1 Byte == 1 bit

那么一个字节的大小能表示多大的数呢?
11111111b = FFh = 255
所以我们可以看出,在无符号位的情况下,一个字节就能表示 0 ~ 255 的数。

符号位

通常,在有符号情况下,也就是变量类型之前有 signed 这样的情况下,8 个比特位的第一位为符号位。
关系为:如果符号位是 0 ,那么这就是一个正数;如果符号位为 1 ,那么这就是一个负数。
那么们举个栗子:
一个 int 型的变量,默认是 signed int 并且是 4 个字节的,那么就占有 8 * 4 = 32 个比特位,同时他第一位是符号位,那么就只有 31 个比特位是表示数值的,表示的大小就是 -2的31次方~2的31次方

补码

这里引入一个补码的概念,虽然我并不知道这个有啥用,但是我看教程都讲了,那就也写一下吧。

补码的算法

  • 如果是一个正数的补码
    • 那他的补码就是这个正数的二进制形式
  • 如果是一个负数的补码
    • 那就先取这个负数的绝对值
    • 然后将绝对值换为二进制形式
    • 将二进制按位取反得到一个二进制数
    • 将得到的二进制数加 1 就得到了这个负数的补码

基本数据类型的取值范围

数据类型 字节数 取值范围
char 1 -128 ~ 127
unsigned char 1 0 ~ 255
short 2 -32768 ~ 32767
unsigned short 2 0 ~ 65535
int 4 -2147483648 ~ 2147483647
unsigned int 4 0 ~ 4294967295
long 4 -2147483648 ~ 2147483647
unsigned long 4 0 ~ 4294967295
long long 8 -9223372036854775808 ~ 9223372036854775807
unsigned long long 8 0 ~ 18446744073709551615
float 4 1.17549*10^(-38) ~ 3.40282*10^38
double 8 2.22507*10^(-308) ~ 1.79769*10^308
long double 12 1.2*10^(-4932) ~ 1.2*10^4932

最后一组数据不准确,只做参考,在上述表中, ^ 为乘方符号

你可能感兴趣的:(C语言笔记——取值范围)