美文网首页我用 Linux互联网科技Linux
小朋友学C语言(44):基本数据类型的大小和取值范围

小朋友学C语言(44):基本数据类型的大小和取值范围

作者: 海天一树X | 来源:发表于2019-01-21 20:57 被阅读15次

一、单字节能表示的范围

(一)无符号单字节

一个字节有8位,取值范围为0000000011111111,化为十进制即为0255。所以无符号的一个字节可以表示的数字范围为0~255,共256个数。

(二)有符号单字节

若有符号,则最高位表示符号位,0表示正号,1表示负号。能表示的正数的最大值为01111111,即十进制的127。能表示的负数的最小值不是11111111,而是10000000。10000000是个特殊的数字,1既表示负号,也参与了运算,化为十进制则为-27 = 128。而11111111则是第二小的数,化为十进制则为-127。
所以有符号的一个字节可表示的数字范围为-128 ~ 127,共256个数。
一个字节 = bit。

二、布尔类型

可以使用sizeof运算符求出基本数据类型的大小。

例1

#include <stdio.h>

int main()
{
    printf("%d\n", sizeof(bool));
    return 0;
}

运行结果:

1

分析:
这里可以看出,每个bool变量占一个字节。因为bool只有两个值,true和false,即1和0。所以用一个bit位就足够表示了。这里用一个字节实际上是浪费了内存。但是因为计算机存储数据的基本单位是Byte,不是bit。所以也没什么办法。
sizeof不是一个函数,而是一个运算符。作用是计算所占内存大小。

三、字符型

考虑到A-Z的ASCII码为65-90,a-z的ASCII码为97-122。这两段的数据范围,用一个字节就可以表示。所以每个字符占用一个字节。下面用程序验证一下:

例2

#include <stdio.h>

int main()
{
    printf("%d\n", sizeof(char));
    return 0;
}

运行结果:

1

四、整型

C和C++中,整型有四种:int、unsigned int、long long、unsigned long long。
unsigend int和int都占4个字节的内存,区别在于,int带符号的,最高位用来表示符号,0为正1为负;unsigned int不带符号,最高位不表示符号,而是参与运算表示数字。unsigned int可以简写为unsigned。
int的最大值是01111111,11111111,11111111,11111111,即十进制的231 – 1 = 2 147 483 647。最小值是10000000,00000000,00000000,00000000,00000000,即十进制的-231 = -2 147 483 648。所以int的数据表示范围大概在-21亿到21亿之间。
unsigned int的最大值是11111111,11111111,11111111,11111111,最小值是00000000,00000000,00000000,00000000,00000000,即十进制的0 ~ 4 294 967 295。

short int和unsigned short int都占2个字节的内存,区别在于,short int带符号的,最高位用来表示符号,0为正1为负;unsigned short int不带符号,最高位不表示符号,而是参与运算表示数字。
short int能表示的数据范围为-215 ~ 215 – 1,即-32768 ~ 32767。
unsigned short int能表示的数据范围为0 ~ 216 – 1,即0 ~ 65535。

unsigend long long和long long都占8个字节的内存,区别在于,long long带符号的,最高位用来表示符号,0为正1为负;unsigend long long不带符号,最高位不表示符号,而是参与运算表示数字。
long long能表示的数据范围为-263 ~ 263 – 1。
unsigned long long能表示的数据范围为0 ~ 264 – 1。

例3

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

int main()
{
    printf("%d\n", sizeof(int));
printf("%d\n", sizeof(unsigned int));

    printf("%d\n", sizeof(short));
printf("%d\n", sizeof(unsigned short));

    printf("%d\n", sizeof(long long));
    printf("%d\n", sizeof(unsigned long long));

    printf("%d\n", INT_MAX);
    printf("%d\n", INT_MIN);

    return 0;
}

运行结果:

4
4
2
2
8
8
2147483647
-2147483648

五、浮点型

float类型占4个字节,double类型占8个字节。

例4

#include <stdio.h>

int main()
{
    printf("%d\n", sizeof(float));
    printf("%d\n", sizeof(double));

    return 0;
}

运行结果:

4
8

float能表示的整数范围约为-3.4 * 1038 ~ 3.4 * 1038,精度即有效数字为7位。
double能表示的整数范围约为-1.79 * 10308 ~ 1.79 * 10308,精度即有效数字为15位。
虽然float和double能表示的整数范围比int和long long能表示的整数范围大的多,但因为浮点数无法精确表示,所以要表示整数(精确值)时,只能用整型变量来表示,不能使用浮点型变量来表示。

少儿编程答疑、算法答疑请加微信307591841或QQ307591841


诺依曼算法公众号.jpg

相关文章

  • 小朋友学C语言(44):基本数据类型的大小和取值范围

    一、单字节能表示的范围 (一)无符号单字节 一个字节有8位,取值范围为0000000011111111,化为十进制...

  • c++基本数据类型

    c++作为c的超集,除了引入了class类型外,其基本数据类型和c基本一致: 各种基本数据类型的大小、范围和精度如...

  • C语言笔记——取值范围

    C语言笔记——取值范围 前言 这章主要是留作备用,作为补充知识的吧,不过常用的数据类型的取值范围还是得做一下了解,...

  • JAVA面试题总览--JAVA基础

    1. JAVA中的几种基本数据类型是什么,各自占用多少字节。 类型占位取值范围字节大小 ============...

  • 数据类型、拆箱和装箱

    基本数据类型占用的字节和bit位 以及 可表示的取值范围 内存中缓存的值的范围 引用数据类型 基本数据类型:整型:...

  • 数据类型的取值范围和溢出

    不知何为原码反码补码的童鞋请猛戳这里,这篇文章要说的是,数据类型的取值范围和溢出 取值范围 数据类型的取值范围有一...

  • GO语言数据结构

    1.go语言基本数据类型 bool 布尔 取值范围(flase、true)不能用数字代替,字节长度1 2.整型 ...

  • 2675字带你进阶C语言中的关键字

    C语言进阶之C语言关键字 基本数据类型 1.数据类型 数据类型可以理解为固定内存大小的别名(例如,在C语言中int...

  • Java数据类型

    java定义了8大基本数据类型,其名称、位数、默认值、取值范围及封装类如下表所示: 序号数据类型位数默认值取值范围...

  • 【OC梳理】基本数据类型和基本运算

    Objective-C作为以C语言为基础的语言,其基本数据类型与C语言类似。 1.基本数据类型 基本数据类型可以参...

网友评论

    本文标题:小朋友学C语言(44):基本数据类型的大小和取值范围

    本文链接:https://www.haomeiwen.com/subject/bsmhjqtx.html