C语言笔记——取值范围
2018-03-13 本文已影响0人
syc_poker
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 |
最后一组数据不准确,只做参考,在上述表中, ^ 为乘方符号