精华内容
下载资源
问答
  • 编程最最基础 是 有四种形态: = 变量 + 常量 + 表达式+ 有函数 变量拥有一个函数拥有一个 表达式是一个 常量是一个 类型: 简单数据类型 不是 容器

    编程最最基础  是 值  值有四种形态:

    值 = 变量 + 常量 + 表达式+ 有值函数

    1. 变量拥有一个值
      1. 有值函数拥有一个值
      2. 表达式是一个值
      3. 常量是一个值

    值的类型:  简单数据类型

    值不是 容器

    展开全文
  • C语言数据类型

    2021-05-12 15:08:17
    本文主要对c语言中数据类型在内存中的存储进行大致的介绍,包括数据的类型、整形的存储、大小端字节序、浮点型在内存中的存储 一、数据类型的基本归类 c语言中基本内置数据类型包括:char(2字节)、short 、int 、...


    前言

    本文主要对c语言中数据类型在内存中的存储进行大致的介绍,包括数据的类型、整形的存储、大小端字节序、浮点型在内存中的存储


    一、数据类型的基本归类

    c语言中基本内置数据类型包括:char(2字节)、short 、int 、long 、long long、 float 、double。c语言中并没有string类型,字符串是通过字符数组来进行存储的。各种基本内置数据类型所占字节的大小如表1中所示。

    数据类型32位64位
    char11
    short22
    int44
    long48
    long long88
    float44
    double88
    1. 整形
    char:
    	unsigned char
    	signed char
    short:
    	unsigned short
    	signed short
    int:
    	unsigned int
    	signed int
    long:
    	unsigned long
    	signed long
    

    2.浮点数

    float
    double
    

    3.构造类型

    数组类型
    结构体类型 struct
    枚举类型 enum
    联合类型 union
    

    4.指针类型

    int* p
    char* p
    float* p
    void* p
    

    5.空类型
    void:表示空类型,通常用于函数返回类型、函数的参数、指针类型。

    二、整形在内存中的存储

    整形在内存中的存储比较简单,有符号数有原码、反码、补码三种表示方式,原码直接将正负数字按二进制写成二进制形式即可;反码是将原码的符号位不变,其他位次取反;补码在反码的基础上加一。正数的原码、反码、补码均相同。对于整形来说,在内存中存放的就是数据的补码,因为计算机系统中只有加法器,使用补码,可以将符号位和数值域统一处理。
    下端代码中主要介绍整形在内存中的存储形式:

    //请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序
    int check_sys() {
    	int i = 1;
    	return *((char*)&i);
    
    }
    int main() {
    	if (check_sys()) {
    		printf("小端\n");
    	}
    	else {
    		printf("大端\n");
    	}
    	return 0;
    }
    

    数字1的十六进制形式为0x0001,而在内存中存放形式为01 00 00 00,这种存放形式称为小端模式。

    在这里插入图片描述
    大端模式:数据的低位保存在内存的高地址中,数据的高位保存在内存的低地址中。
    小端模式:数据的低位保存在内存的低地址中,数据的高位保存在内存的高地址中。

    三、浮点型在内存中的存储

    下段代码将数字9分别以整型存入,浮点型读出;浮点型存入,整形读出。

    int n = 9;
    	float* pFloat = (float*)&n;
    	printf("n的值为:%d\n", n);
    	printf("*pFloat的值为:%f\n", *pFloat);
    
    	*pFloat = 9.0;
    	printf("num的值为:%d\n", n);
    	printf("*pFloat的值为:%f\n", *pFloat);
    

    运行结果为:

    在这里插入图片描述
    出现这种情况的原因是因为浮点型和整形在内存中的存放形式是不同的。
    根据国际标准IEEE754,任意一位二进制浮点数可以表示为: ( − 1 ) S ∗ M ∗ 2 E (-1)^S*M*2^E (1)SM2E。其中, ( − 1 ) S (-1)^S (1)S表示符号位, S = 0 S=0 S=0时表示正数, S = 1 S=1 S=1时表示负数; M M M表示有效数字,其中 1 ≤ M < 2 1≤M<2 1M<2 2 E 2^E 2E表示指数位。
    例如:十进制数字9.0,其二进制为1001.0,用上述形式写为 1.001 × 2 3 1.001×2^3 1.001×23 S = 0 S=0 S=0 M = 1.001 M=1.001 M=1.001 E = 3 E=3 E=3。十进制数字-9.0,其二进制为-1001.0,用上述形式写为 − 1.001 × 2 3 -1.001×2^3 1.001×23 S = 1 S=1 S=1 M = 1.001 M=1.001 M=1.001 E = 3 E=3 E=3。32位单精度浮点数在在内存中的存储模型为下图:


    64位的双精度浮点数存储模型与32位的不同在其E为11位,M为52位。
    另外,对于M和E的特殊规定,计算机内存在保存M时,默认第一位总是1,因此在保存时被舍去,只保存小数点后面部分。例如,保存1.001时,只保存001,在读取时再把第一位加上去,这样可以节省1位有效数字。而对于指数E,E为unsigned int,当E为8位时,表示范围位0~255,为了在科学计数法中可以表示负数,所以规定在存入E时必须加上一个中间数,对于8位E的中间数位127。比如当需要存入的E实际为-10时,需要加上中间数127等于126,然后把126存入到内存中。
    这样就可以解释一开始的程序结果,整数9存入到内存中的十六进制为0x00000009,按浮点数形式取出时将其二进制形式表示成浮点型内存表示形式,此时E全为0,这时,浮点数的指数E等于1-127即为真实值, 有效数字M不再加上第一位的1,而是还原为0点几的小数。这样做是为了表示±0,以及接近于0的很小的数字: ( − 1 ) 0 × 0.0000000000000000000000000001001 × 2 ( − 126 ) = 1.001 × 2 ( − 146 ) (-1)^0×0.0000000000000000000000000001001×2^(-126)=1.001×2^(-146) (1)0×0.0000000000000000000000000001001×2(126)=1.001×2(146)为一个接近于0的正数,所以按浮点型取出为0。
    当存入浮点数9.0,存入的内存形式为 ( − 1 ) 0 × 1.001 × 2 3 (-1)^0×1.001×2^3 (1)0×1.001×23,即 S = 0 S=0 S=0 M = 001 M=001 M=001 E = 3 + 127 = 130 E=3+127=130 E=3+127=130。写成二进制形式:
    0 10000010 00100000000000000000000
    将其还原为十进制为1091567616。

    总结

    本文介绍了c语言中的基本数据类型,主要介绍了整形以及浮点型在内存中的存储差异,并举例说明了数据类型使用不当引发程序隐蔽的错误,有利于以后遇到类似问题能够更好地解决。

    展开全文
  • 本人在学习过程中对数据类型的存储范围的概念非常模糊,特整理一下,不对的地方请评论指正。我个人的理解:比如 int 类型数据 一般规定是2个字节的长度,取值范围是 无符号的 2的16次减1 有符号的是 -2的15次方 到 2...

    本人在学习过程中对数据类型的存储范围的概念非常模糊,特整理一下,不对的地方请评论指正。

    我个人的理解:比如 int 类型数据 一般规定是2个字节的长度,取值范围是 无符号的 2的16次减1  有符号的是 -2的15次方 到 2的15次方-1. 这个取值范围是怎么来的呢?为什么int的字节数为2呢?这里是我最不能明白的地方。通过查阅大量资料,最终通过总结理解得出以下结论。

    先说一下第二个问题,为什么int 的字节数为2呢?

    其实这个是由编译系统定义的,是规定,至于为什么这样规定,就先不深揪了。

    在来说一下第一个问题,int 的取值范围

    要明白这个问题,先得看看我的第一篇文章,基础中的 字节和位的关系,再来看这篇文章会更加明白。

    首先,我们先做个小数值的例子

    计算机只能执行0和1,所有程序最终都会翻译成0和1的代码,位是计算机的最小信息单位(也可以理解成存储单位),

    1个位能表示俩种状态

    0 1俩种状态也就是2的1次方,十进制取值范围就是0~1。

    2个位就能表示4种状态

    00 01 10 11 四种状态就是2的2次方,十进制取值范围就是0~3。

    3位就能表示8种种状态

    000 001 010  011 100 101 110 111  8种状态,也就是2的3次方,十进制的取值范围就是0~7。

    通过以上例子可以得出 n 位能表示的状态是2的n次方,其十进制取值范围是0~2的n次方-1。

    这是无符号的的,在说一个有符号的,

    以三位来说明

    000 001 010 011       100 101 110 111

    第一位表示状态也就是正负

    他能表示8种状态,就是-2的2次方~2的2次方减1.

    其十进制取值范围是-4~3啦。(这块大家可能不明白,我也不是太懂,通过查资料负的二进制数转换为十进制数的是后要取反加1的,000取反011加一之后是0100是-4啦 ,011取反是000加一就是001就是-1啦。100就是正的0,0不分正负,111就是正的3)

    同样的道理,俩个字节,就是16位啦,

    无符号最大值是0~2的16次方就是0~65535

    有符号的就是-2的15次方~2的15次方减1。

    展开全文
  • C语言数组的概念

    2021-05-19 04:14:58
    在《C语言数据输出大汇总以及轻量进阶》一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下:#include #include int main(){int a1=20, a2=345, a3=700, a4=22;int b1=56720, b2=9999, b3=20098, b4=2;...

    在《C语言数据输出大汇总以及轻量进阶》一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下:

    #include

    #include

    int main()

    {

    int a1=20, a2=345, a3=700, a4=22;

    int b1=56720, b2=9999, b3=20098, b4=2;

    int c1=233, c2=205, c3=1, c4=6666;

    int d1=34, d2=0, d3=23, d4=23006783;

    printf("%-9d %-9d %-9d %-9d\n", a1, a2, a3, a4);

    printf("%-9d %-9d %-9d %-9d\n", b1, b2, b3, b4);

    printf("%-9d %-9d %-9d %-9d\n", c1, c2, c3, c4);

    printf("%-9d %-9d %-9d %-9d\n", d1, d2, d3, d4);

    system("pause");

    return 0;

    }

    运行结果:

    20 345 700 22

    56720 9999 20098 2

    233 205 1 6666

    34 0 23 23006783

    矩阵共有 16 个整数,我们为每个整数定义了一个变量,也就是 16 个变量。那么,为了减少变量的数量,让开发更有效率,能不能为多个数据定义一个变量呢?比如,把每一行的整数放在一个变量里面,或者把 16 个整数全部都放在一个变量里面。答案当然是肯定的,办法就是使用数组(Array)。

    数组的概念和定义

    我们知道,要想把数据放入内存,必须先要分配内存空间。放入4个整数,就得分配4个int类型的内存空间:

    int a[4];

    这样,就在内存中分配了4个int类型的内存空间,共 4×4=16 个字节,并为它们起了一个名字,叫a。

    我们把这样的一组数据的集合称为数组(Array),它所包含的每一个数据叫做数组元素(Element),所包含的数据的个数称为数组长度(Length),例如int a[4];就定义了一个长度为4的整型数组,名字是a。

    数组中的每个元素都有一个序号,这个序号从0开始,而不是从我们熟悉的1开始,称为下标(Index)。使用数组元素时,指明下标即可,形式为:

    arrayName[index]

    arrayName 为数组名称,index 为下标。例如,a[0] 表示第0个元素,a[3] 表示第3个元素。

    接下来我们就把第一行的4个整数放入数组:

    a[0]=20;

    a[1]=345;

    a[2]=700;

    a[3]=22;

    这里的0、1、2、3就是数组下标,a[0]、a[1]、a[2]、a[3] 就是数组元素。

    在学习过程中,我们经常会使用循环结构将数据放入数组中(也就是为数组元素逐个赋值),然后再使用循环结构输出(也就是依次读取数组元素的值),下面我们就来演示一下如何将 1~10 这十个数字放入数组中:

    #include

    int main(){

    int nums[10];

    int i;

    //将1~10放入数组中

    for(i=0; i<10; i++){

    nums[i] = (i+1);

    }

    //依次输出数组元素

    for(i=0; i<10; i++){

    printf("%d ", nums[i]);

    }

    return 0;

    }

    运行结果:

    1 2 3 4 5 6 7 8 9 10

    变量 i 既是数组下标,也是循环条件;将数组下标作为循环条件,达到最后一个元素时就结束循环。数组 nums 的最大下标是 9,也就是不能超过 10,所以我们规定循环的条件是 i<10,一旦 i 达到 10 就得结束循环。

    更改上面的代码,让用户输入 10 个数字并放入数组中:

    #include

    int main(){

    int nums[10];

    int i;

    //从控制台读取用户输入

    for(i=0; i<10; i++){

    scanf("%d", &nums[i]); //注意取地址符 &,不要遗忘哦

    }

    //依次输出数组元素

    for(i=0; i<10; i++){

    printf("%d ", nums[i]);

    }

    return 0;

    }

    运行结果:

    22 18 928 5 4 82 30 10 666 888↙

    22 18 928 5 4 82 30 10 666 888

    第 8 行代码中,scanf() 读取数据时需要一个地址(地址用来指明数据的存储位置),而 nums[i] 表示一个具体的数组元素,所以我们要在前边加 & 来获取地址。

    最后我们来总结一下数组的定义方式:

    dataType arrayName[length];

    dataType 为数据类型,arrayName 为数组名称,length 为数组长度。例如:

    float m[12]; //定义一个长度为 12 的浮点型数组

    char ch[9]; //定义一个长度为 9 的字符型数组

    需要注意的是:

    1) 数组中每个元素的数据类型必须相同,对于int a[4];,每个元素都必须为 int。

    2) 数组长度 length 最好是整数或者常量表达式,例如 10、20*4 等,这样在所有编译器下都能运行通过;如果 length 中包含了变量,例如 n、4*m 等,在某些编译器下就会报错,我们将在《C语言变长数组》一节专门讨论这点。

    3) 访问数组元素时,下标的取值范围为 0 ≤ index < length,过大或过小都会越界,导致数组溢出,发生不可预测的情况,我们将在《C语言数组的静态性、越界以及溢出》一节重点讨论,请大家务必要引起注意。

    数组内存是连续的

    数组是一个整体,它的内存是连续的;也就是说,数组元素之间是相互挨着的,彼此之间没有一点点缝隙。下图演示了int a[4];在内存中的存储情形:

    af1b324f77f7ed8e93deb426bea20d86.png

    「数组内存是连续的」这一点很重要,所以我使用了一个大标题来强调。连续的内存为指针操作(通过指针来访问数组元素)和内存处理(整块内存的复制、写入等)提供了便利,这使得数组可以作为缓存(临时存储数据的一块内存)使用。大家暂时可能不理解这句话是什么意思,等后边学了指针和内存自然就明白了。

    数组的初始化

    上面的代码是先定义数组再给数组赋值,我们也可以在定义数组的同时赋值,例如:

    int a[4] = {20, 345, 700, 22};

    数组元素的值由{ }包围,各个值之间以,分隔。

    对于数组的初始化需要注意以下几点:

    1) 可以只给部分元素赋值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:

    int a[10]={12, 19, 22 , 993, 344};

    表示只给 a[0]~a[4] 5个元素赋值,而后面 5 个元素自动初始化为 0。

    当赋值的元素少于数组总体元素的时候,剩余的元素自动初始化为 0:

    对于short、int、long,就是整数 0;

    对于char,就是字符 '\0';

    对于float、double,就是小数 0.0。

    我们可以通过下面的形式将数组的所有元素初始化为 0:

    int nums[10] = {0};

    char str[10] = {0};

    float scores[10] = {0.0};

    由于剩余的元素会自动初始化为 0,所以只需要给第 0 个元素赋值为 0 即可。

    2) 只能给元素逐个赋值,不能给数组整体赋值。例如给 10 个元素全部赋值为 1,只能写作:

    int a[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};

    而不能写作:

    int a[10] = 1;

    3) 如给全部元素赋值,那么在定义数组时可以不给出数组长度。例如:

    int a[] = {1, 2, 3, 4, 5};

    等价于

    int a[5] = {1, 2, 3, 4, 5};

    最后,我们借助数组来输出一个 4×4 的矩阵:

    #include

    int main()

    {

    int a[4] = {20, 345, 700, 22};

    int b[4] = {56720, 9999, 20098, 2};

    int c[4] = {233, 205, 1, 6666};

    int d[4] = {34, 0, 23, 23006783};

    printf("%-9d %-9d %-9d %-9d\n", a[0], a[1], a[2], a[3]);

    printf("%-9d %-9d %-9d %-9d\n", b[0], b[1], b[2], b[3]);

    printf("%-9d %-9d %-9d %-9d\n", c[0], c[1], c[2], c[3]);

    printf("%-9d %-9d %-9d %-9d\n", d[0], d[1], d[2], d[3]);

    return 0;

    }

    展开全文
  • C语言指针的概念

    2021-05-21 10:48:52
    一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍。为了正确地访问这些内存单元,必须为每个内存单元编上号。根据一...
  • C语言数据类型和变量

    2021-05-20 06:27:44
    C语言数据类型和变量》由会员分享,可在线阅读,更多相关《C语言数据类型和变量(75页珍藏版)》请在人人文库网上搜索。1、第3章C数据类型和变量,学习目的和要求: 掌握数据类型和变量的基本概念、特点和使用方法 。...
  • C语言强制类型转换

    2021-05-21 05:25:14
    概要:C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的。不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个地址就是硬件访问的依据,而名字只是提供给程序员...
  • ​ 基本数据类型最主要的特点就,其不可以再分解为其它类型。也就是说,基本数据类型是自我说明的。 常量 在程序执行过程中,其不发生改变的量。在C语言中用一个标识符来表示,所以又叫作符号常量。 公式:#...
  • C语言习题概念.doc

    2021-05-19 20:26:07
    练习题 2015-2016(2)重修)判断C 语言源程序文件通过了编译、连接... ( )C语言中数据类型只有整型、实型和字符型。 ( )int i=20;switch(i/10){case 2:printf("A");case 1:printf("B");}的输出结果为A。( )Break语...
  • 1 C语言文件的概念在程序中,当调用输入函数从外部文件中输入数据赋给程序中的变量时,这种操作成为“输入”或“读”;当调用输出函数把程序中变量的输出到外部文件中时,这种操作称为“输出”或“写”。C 语言中...
  • c语言基本概念

    千次阅读 2021-01-04 21:51:37
    什么是c语言 c语言是一门通用计算机编程语言,广泛应用于底层的开发。C语言的设计目标是提供一种能以简易的方式编译,处理低级存储器,产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。 尽管...
  • c语言枚举类型enum用法及应用

    千次阅读 多人点赞 2021-07-14 10:36:26
    让我惊奇的是市面上的一些C语言书籍以及视频课程并没有重视去讲enum。 今天我们还是从理论到实际产品应用,教大家真正掌握enum。 通过这篇内容你能掌握以下知识: 掌握枚举的相关概念 掌握枚举的几种用法 掌握...
  • C语言中的地址类型

    2021-05-21 16:10:39
    第!!卷!第"期#$%&!!!’$&"! ! ! ! !平!原!大!学!学!...667‘语言中的地址类型杨延玉!...地址类型"的概念#并使用它剖析了‘语言的高维数组中的地址表示机制#对使用指针变量与数组搭配访问数...
  • C语言的数据类型

    2021-05-21 03:34:35
    以下为《C语言的数据类型》的无排版文字预览,完整格式请下载下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。C语言的数据类型:1、C语言中的数据为什么要分类型?答:因为...
  • C语言中常量概念

    2021-05-16 10:57:38
    啊,这个,总所周知,在C程序执行过程中,其不发生改变的量称为常量,其可变的量称为变量。 而常量又可分为以下几类 2, 常量的分类 1,字面常量 这里是直接写出的量叫字面常量,它不能被修改。例如:1,2,3,...
  • C语言指针概念

    2021-08-30 14:00:12
    C语言指针概念什么是指针指针的概念指针的类型指针的运算符&和* 什么是指针 指针是C语言中的一个重要概念,也是一个重要特色,他极大丰富了C语言的功能。利用指针变量可以表示各种数据结构;能很方便地使用...
  • §2.4不同类型数据间的转换2.4.1基本概念C语言允许数据从一种类型转换成另一种类型。数据类型的转换有如下三种基本形式:(1)同一类型但长度不同的数据间的转换。(2)定点方式与浮点方式之间的转换。(3)整型数中的有...
  • 2.C语言数据类型

    2021-05-18 11:33:41
    数据类型作用:编译器预算对象(变量)分配的内存大小Snip20190214_4.png变量在程序运行过程中,其可以改变变量在使用前必须先定义,定义变量前必须有相应的数据类型标识符不能是关键字标识符只能由字母、数字、...
  • C语言程序设计基本概念》由会员分享,可在线阅读,更多相关《C语言程序设计基本概念(41页珍藏版)》请在技术文库上搜索。1、C语言程序设计 任课教师介绍 许 创 副教授 (工学院计算机系) 手机:692211 E-mail: cxu ...
  • 数据类型1.基本数据类型:基本数据类型最主要的特点是,其不可以分解为其他类型。也就是说,基本数据类型是自我说明的2....在c语言中构造类型有以下几种:·数据类型·结构体类型·共同体(联合)类型3.指针类型:指...
  • 本文从指针的基本概念出发,结合具体实例对指针的类型进行了分析,并对指针在实际应用中常出现的问题进行了归类总结,希望对初学者理解“指针”这一重要概念有所帮助。关键词: C语言程序设计 指针 数组 函数指针是...
  • C语言中指针的概念

    2021-05-18 12:42:25
    C语言中指针的概念在信息工程中,...在C语言中,指针是指一个变量的地址,通过变量的地址″指向″的位置找到变量的,这种″指向″变量地址可形象地看作″指针″。用来存放指针的变量称为指针变量,它是一种特殊...
  • 将后跟的表达式的的数据类型转换为与圆括号内的类型名一致的类型。注意类型名一定要用() 括起来。 算术表达式 iv.算术运算符:+,-,*,/,%(求余) v.由算术运算符加上运算对象构成算术表达式,如3+3*6-9/2 vi.:...
  • C语言复合数据类型-数组第6章 复合数据类型(1)-数组教学要求:1、掌握一维数组和二维数组的定义及使用2、掌握C语言数组在内存中的存储形式3、掌握使用字符数组及指针处理字符串数据的方法4、掌握与数组有关的基本...
  • 1:C程序由函数组成,每个C程序必须有... (4)空类型类型是一种特殊的数据类型,使用void表示,其数据没有确定的数据类型。在C程序中,对于返回值为void的函数,应根据应用需要转换为一种确定的数据类型。 全部
  • 不使用C++时,很多C语言新手可能认为C语言缺乏了面向对象和抽象性,事实上,C语言通过某种组合方式,可以间接性的实现面对对象和抽象。不过多态和继承这种实现,就有点小麻烦,但是依然可以实现。核心:利用 void ...
  • C语言的文件概念

    2021-05-18 15:00:08
    以下是百分网小编分享给大家的C语言的文件概念,帮助大家学习C语言基础知识,欢迎阅读!文件的基本概念所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称,叫做文件名。实际上在前面的各章中我们已经多...
  • c语言之参数概念

    千次阅读 2021-03-09 13:08:30
    2.1 形参 定义:全称"形式参数",用于定义方法的时候使用的参数,...传值调用中,传递的参数类型是为常用的基本数据类型,参数视为形参,这里形参是局部变量。 2.4 引用调用 引用调用中,在Java中,传递的参数类型.
  • C语言基本数据类型

    2021-06-09 12:56:57
    整数类型的变量(int),浮点数类型(float)。 float类型可以储存带小数的数字。 在printf()中使用%f来处理浮点。%.2f中的.2用于精确控制输出,指定输出的浮点数只显示小数点后两...整数:和数学概念一样,是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 104,502
精华内容 41,800
关键字:

c语言值类型概念

c语言 订阅
友情链接: pedometer.rar