精华内容
下载资源
问答
  • C语言数据类型

    2019-11-08 09:32:37
    C语言数据类型的定义C语言数据类型常用数据类型数据类型范围数据类型定义数据类型的强制转换(隐式和显示类型转换)学习总结型转换 C语言数据类型 c语言定义数据类型最熟要的目的就是用来存储我们日常使用数据例如...

    C语言数据类型

    c语言定义数据类型最重要的目的就是用来存储我们日常使用数据例如;姓名,生日,年龄,电话,地址。甚至将几个信息关联到一起使用。对于信息数据的长短,定义适合我们使用的数据类型。(建议看本文之前先去了解计算机二进制原码反码补码)

    常用数据类型

    在32位的平台之下一般常用数据类型占内存的大小如下:具体可以通过情况可通过sizeof关键字进行计算数据类型的大小。

    类型 数据大小
    char 1字节
    short 2字节
    int 4字节
    float 4字节
    double 8字节

    数据类型范围

    了解过数据大小之后我们还要学习各个类型的数据存储数值范围

    类型 数据大小 数值范围
    char 1字节 -128-127
    unsigned char 1字节 0-255
    short 2字节 -32,768 -32,767
    unsigned short 2字节 0-65535
    int 4字节 -2,147,483,648- 2,147,483,647
    unsigned int 4字节 0-4,294,967,295

    这里便提到了一个关键字unsigned ,使用unsigned关键字修饰数据类型,则定义为无符号数据类型。其实与之对应的还有一个关键字叫做signed,由于C语言缺省signed修饰数据类型所以通常定义char =signed char。两个关键字顾名思义一个有符号一个无符号。为什么同样大小的数据类型会存在两种数值范围呢?思考一下生活中电饭锅的定时永远不会出现负数,而电子温度计是会出现负数也会出现正数。所以写c语言之前一定要考虑好定义的数据类型是否会在使用过程中出现越界,这是日常开发当中很容易出现的bug,使用时要谨慎。

    数据类型定义

    #include <stdio.h> 
    int main ()
    {
        int a = 3;//定义a 是一个整形数据类型  a = 3
    	char b = ‘a’;//定义b是一个字符型数据类型,'a' = 97 (看asc码表)
    	return; 
    } 
    

    数据类型的强制转换(隐式和显示类型转换)

    1.无符号数与有符号数相加(隐式类型转换)

    #include <stdio.h> 
    int main ()
    {
        int a = -5;
    	unsigned int b = 1;
    	if ((a+b) >= 0)
    	{
    		printf("%s","a+b >= 0");	
    	}
    	else
    	{
    		printf("%s","a+b  < 0");	
    	}
    	 
    	return; 
    } 
    //运行结果是a+b >=0  所以隐式转换变量的所有数据类型都升级为具有最大数据类型的变量的数据类型。
    
    

    bool - > char - > short int - > int - > unsigned int …
    隐式转换变量的所有数据类型都升级为具有最大数据类型的变量的数据类型,可能会丢失信息,符号可能会丢失,并且可能发生溢出,所以谨慎使用。
    2.强制转换(显示类型转换)

    #include<stdio.h> 
      
    int main() 
    { 
        double a = 1.2; 
        int sum = (int)a + 1; 
        printf("sum = %d", sum); 
        return 0; 
    //运行结果是2
    } 
    
    #include <stdio.h> 
    int main() 
    { 
        unsigned char a = 255; 
        int sum = (unsigned int)a + 1; 
        printf("sum = %d", sum); 
        return 0; 
    //运行结果是256
    } 
    

    示例1:使用()进行强制类型转换由大到小转换则会使得数据损失精度,示例2:由小到大则符合了我们预期的想法。

    学习总结型转换

    数据类型是c语言的基础,注意定义的数据是否在使用中出现越界是本篇文章的关键。对于强制类型转换是把双刃剑使用时注意有没有丢失数据精度,要保证我们的程序运行可靠。

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

    千次阅读 热门讨论 2016-10-05 11:35:52
    C语言数据类型学号:16340181 本人学院C语言数据类型 一数据类型 1 short 2int 3long 4char 5float 6double 作用域前缀命名规则 formula 一、数据类型short、int、long、char、float、double 这六个关键字代表C ...

    C语言数据类型#

    学号:16340181
    本人学院

    一、数据类型

    short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。

    此处输入图片的描述

    在32 位的系统上short 咔出来的内存大小是2 个byte;
    int 咔出来的内存大小是4 个byte;
    long 咔出来的内存大小是4 个byte;
    float 咔出来的内存大小是4 个byte;
    double 咔出来的内存大小是8 个byte;
    char 咔出来的内存大小是1 个byte。
    (注意这里指一般情况,可能不同的平台还会有所不同,具体平台可以用sizeof 关键字测试一下)


    ###1) short
    C语言中,short是定义一种整型变量家族的一种。例如short i;表示定义一个短整型的变量i。

    长度

    依据程序编译器的不同short定义的字节数不同。

    标准定义short短整型变量不得低于16位,即两个字节。

    编译器头文件夹里面的limits.h定义了short能表示的大小:SHRT_MIN~SHRT_MAX。

    在32位平台下如windows(32位)中short一般为16位,范围-32768~+32767。

    2)int

    C/C++编程语言中,int表示整型变量,是一种数据类型,用于定义一个整型变量,在不同编译环境有不同的大小,不同编译运行环境大小不同。

    3)long

    long关键字表示一种整型,该类型根据下表显示的大小和范围存储值。

    类型 范围 大小 .NET Framework 类型

    long

    -2,147,483,648 to 2,147,483,647

    有符号 32位整数

    System. Int32

    所占4个字节(Byte)

    4)char

    义:计算机编程语言(c、c++、java、VFP,pascal,等)中可容纳单个字符的一种基本数据类型。

    在C/C++中,char是C/C++整型数据中比较古怪的一个,

    而且关于char还有一个特殊的语言就是char *,它在C/C++中有专门的语义,既不同于signed char *,也不同于unsigned char *,专门用于指以’\0’为结束的字符串

    5)float###

    浮点数使用 IEEE(电气和电子工程师协会)格式。浮点类型的单精度值具有 4 个字节,包括一个符号位、一个 8 位 excess-127 二进制指数和一个 23 位尾数。尾数表示一个介于 1.0 和 2.0 之间的数。由于尾数的高顺序位始终为 1,因此它不是以数字形式存储的。此表示形式为 float 类型提供了一个大约在 3.4E–38 和 3.4E+38 之间的范围。

    ###6)double ###
    此数据类型与单精度数据类型(float)相似,但精确度比float高,编译时所占的内存空间依不同的编译器而有所不同,通常情况,单精度浮点数占4字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,;双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308。

    This is an example inline link.


    母校


    ####作用域前缀命名规则
    在此插入一表格

    N0. 标识符类型 作用域前缀
    1 Global g
    2 File Static Variable n
    3 Function Static Variable f
    4 Auto variable a
    5 Global Function g
    6 Static Function n

    ####formula
    A=dn×Rn−1+dn−1×Rn−2+...+d2×R+d1A=dn\times Rn-1 + dn-1 \times Rn-2 + ... + d2 \times R + d1A=dn×Rn1+dn1×Rn2+...+d2×R+d1


    this is test1

    更多技术博客https://vilin.club/


    1. This blog is done by Vilin. Thanks for your reading. ↩︎

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

    千次阅读 多人点赞 2017-08-22 11:45:47
    整形 Name Description Size* Range*signed: Range*unsigned: char Character or small integer. 1byte -128 to 127 0 to 255 short int (short) Short Integer. ... -32768 ...
    展开全文
  • PAGE / NUMPAGES 浅谈C语言002C语言数据类型 第一部分 C语言数据类型 数据是我们日常生活中经常见到的东西那么在C语言中也不例外 C语言的数据类型分为基本数据类型指针数据类型构造数据类型和空类型 在基本数据类型...
  • 一起学习C语言:C语言数据类型(三)

    千次阅读 2020-02-07 17:09:41
    一起学习C语言:C语言数据类型(二)>中,我们了解了整形和字符类型的定义,以及二进制到八进制、十进制和十六进制转换方式。本篇文章中,我们进行分析浮点数的运算,并通过二进制、十进制和十六进制表达浮点数值。 ...

      上一篇<一起学习C语言:C语言数据类型(二)>中,我们了解了整形和字符类型的定义,以及二进制到八进制、十进制和十六进制转换方式。本篇文章中,我们进行分析浮点数的运算,并通过二进制、十进制和十六进制表达浮点数值。


    章节预览:

    1.4 浮点数类型
    1.4.1 浮点数的表示方法
    1.4.2 单精度浮点数类型
    1.4.3 关于浮点数精度问题
    1.4.4 实数转换到单精度浮点数
    1.4.5 单精度浮点数取值范围
    1.4.6 双精度浮点数类型
    1.4.7 双精度浮点数取值范围
    1.5 本章总结
    1.6 练习题
    目录预览


    章节内容:


    1.4 浮点数类型


      浮点数类型采用实数形式展示,它由符号位、指数位和尾数位构成,因此,不能直接按照二进制数字方式计算。另外,浮点数类型在编译器中只以有符号类型形式存在,下面我们来分析它的组成结构和运算方式。


    1.4.1 浮点数的表示方法

      在IEEE-754标准中,浮点数的定义如下:
        把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示,数的小数点位置随比例因子的不同而在一定范围内自由浮动。
        一个R进制数N使用科学表达式表示为N = R^e * M(或M * R^e),其中R表示基数、M表示尾数、e表示指数。


    1.4.2 单精度浮点数类型

      float 表示单精度浮点数类型,在16位、32位以及64位系统下都占用四个字节(Byte)。参考图1.4-1 单精度浮点数结构表,我们来分析实数的计算方式:


    bit(位) 31bit (23-30)bit (0-22)bit
    数据描述 符号域 指数域 尾数域
    1.4-1 单精度浮点数结构表

    尾数域:

      数据范围0—22bit,共23位(bit),用来表示实数转换为二进制数字的部分,当转换后的二进制数字不足23位时,采用低位补0对齐。下面举个例子,实数5.25:
        整数部分 :直接采用二进制转换得到 101;
        小数部分 :采用“乘2取整”运算,如果结果大于等于1取二进制数字1,否则取二进制数字0,然后用得到的结果小数部分继续运算,一直到小数部分为0或尾数域足够23位:
        0.25 * 2 = 0.5,取0;
        0.5 * 2 = 1,取1;
        小数部分得到 01,整数和小数部分组合为 101.01;

        二进制科学表达式 :规范要求浮点数的小数点左侧必须为1,我们采用小数点左移得到1.0101,这个示例中我们左移了两位,表示为 1.0101 * 2^2;

        尾数域完整数据 :尾数数据储存时,应省略小数点前面的1,这么做是为了省出一位二进制数字,用来存储更多的数据,按左高位右低位表示为 010 1000 0000 0000 0000。


    指数域:

      指数域由8位介码(E)采用移码方式来表示正负指数,数据范围23—30bit,共8位(bit),介码有效范围为1—254,偏移量为127,介码(E) = 127 + 元数据⑵。示例中,指数域计算方式:
      实数5.25计算尾数域时,小数点左移了两位,所以我们的元数据为2,然后通过127 + 2 得到介码129,二进制数字表示为 1000 0001。


    (2) :指数(e)的最高位为符号位,其余位为数据位,可表达有效范围为-126—127,指数(e) = 介码(E) – 127。


    符号域:

      数据为31bit,占1位(bit),0表示正数,1表示负数。


    bit(位) 31bit (23-30)bit (0-22)bit
    实数5.25 0 1000 0001 010 1000 0000 0000 0000 0000
    1.4-2 实数5.25组成部分

      参考图3.4-2 实数5.25组成部分,我们得到二进制数字 0100 0000 1010 1000 0000 0000 0000 0000,十六进制 0x40A8000‬。


    1.4.3 关于浮点数精度问题

      浮点数为什么用精度标记?原因很简单,浮点数尾数域有限,比如单精度浮点数,只能存储23位二进制数字,多余的部分会被抛弃,关于这个问题,我们还是用例子的形式表示,参考实数5.168:
        整数部分 :101;
        小数部分 :0010101100000010011110101110110011001100…

        这个示例中,小数部分从1100开始无限循环,内存中只存储这个二进制数字的前23位,得到的只是这个数字的接近值,这属于由精度问题产生的其中一种情况。
        在编译器中使用float 类型储存5.168时,得到实际数据为5.1680002,在实际使用时,如果必须用到更高精度的浮点数,可以使用双精度浮点数类型。


    1.4.4 实数转换到单精度浮点数

      当我们得到一串数字,比如十六进制C14A0000,我们可以先把这串数字转换为二进制数字然后放到相应区域进行计算:
      转换为二进制数字:


    bit(位) (28-31)bit (24-27)bit (20-23)bit (16-19)bit (12-15)bit (8-11)bit (4-7)bit (0-3)bit
    十六进制数字 C 1 4 A 0 0 0 0
    二进制数字 1100 0001 0100 1010 0000 0000 0000 0000
    1.4-2 实数C14A0000

      参考图1.4-2 实数C14A0000,转换到二进制数字为 1100 0001 0100 1010 0000 0000 0000 0000,然后数据放入相应区域:

    bit(位) 31bit (23-30)bit (0-22)bit
    实数 C14A0000 1 1000 0010 100 1010 0000 0000 0000
    数据描述 符号域 指数域 尾数域
    1.4-3 实数C14A0000组成部分

      尾数域 :100 1010 0000 0000 0000 0000;
      指数域 :1000 0010;
      符号域 :1;


    首先计算指数域:

      指数e = 1000 0010 – 0111 1111 = 0000 0011,转换到十进制数字为3。


    然后计算尾数域:

      首先把最低位为1之后的0去掉得到 100 101,二进制科学表示方式为 1.100 101 * 2^3,实数N等于:
        N = (1 * 2^0 + 1 * 2^-1 + 1 * 2^-4 + 1 * 2^-6) * 2^3
        N = (1 + 0.5 + 0.0625 + 0.015625) * 8
        N = 12.625


    最后计算符号域:

      符号位为1,表示这个数为负数,十进制数字为 -12.625。


    1.4.5 单精度浮点数取值范围

      之前介绍浮点数存储的数字与部分实际数字有些偏差,在取值范围这部分也存在着偏差,浮点数范围主要由指数域决定的,比如单精度浮点数:正数指数值最大有效值是127,可以得到正数最大理论值1.111 1111 1111 1111 1111 1111 * 2^127,接近2 * 2^127,VS2010编译器中为3.402823466e+38F;负数指数最小有效值是-126,可以得到正数最小理论值1.111 1111 1111 1111 1111 1111 * 2^-126,接近2 * 2^-126,VS2010编译器中为1.175494351e-38F。负数最大、最小理论值与正数刚好相反,当数据接近-2 * 2^127时,为负数最小值,数据接近-2 * 2^-126时,为负数最大值。在大部分编译器中,单精度浮点数可以表示包含小数在内的6-8位十进制数字。


    1.4.6 双精度浮点数类型

      在部分领域中,需要使用高精度的数字,比如纳秒与秒级单位之间的转换使用单精度浮点数无法显示完整的十进制数,这种情况下,应使用双精度浮点类型存储。double 表示双精度浮点数类型, 在16位、32位以及64位系统下都占用八个字节(Byte)。参考图1.4-4 双精度浮点数结构表,我们来分析实数的运算方式:


    bit(位) 63bit (52-62)bit (0-51)bit
    数据描述 符号域 指数域 尾数域
    1.4-4 双精度浮点数结构表

    尾数域:

      数据范围0—51bit,共52位(bit),用来表示实数转换为二进制数字的部分,当转换后的二进制数字不够52位时,采用低位补0对齐。下面举个例子,实数5.25000012345:
        整数部分:直接采用二进制转换得到 101;
        小数部分:还是采用“乘2取整”运算,如果结果大于等于1取二进制数字1,否则取二进制数字0,然后用得到的结果小数部分继续运算,一直到小数部分为0或尾数域足够52位:

          0.25000012345 * 2 = 0.5000002469‬,取0;
          0.5000002469‬ * 2 = 1.0000004938,取1;
          0.0000004938 * 2 = 0.0000009876,取0;
          ……

          得到小数部分0100 0000 0000 0000 0000 0010 0001 0010 0011 0110 1011 0101 1101 1111 1111 1011 … ,整数和小数部分组合为 101.01 0000 0000 0000 0000 0000 1000 0100 1000 1101 1010 1101 0111… ;

        尾数域完整数据:首先整数部分二进制数字01放入尾数域,然后把小数部分前50位二进制数字放入尾数域,得到
    0101 0000 0000 0000 0000 0000 1000 0100 1000 1101 1010 1101 0111,一共52位有效二进制数字。

        优化整数和小数部分组合:101.01 0000 0000 0000 0000 0000 1000 0100 1000 1101 1010 1101 0111,一共53位二进制数字。

        二进制科学表示方式: 1.0101 0000 0000 0000 0000 0000 1000 0100 1000 1101 1010 1101 0111 * 2^2;


    指数域:

      数据范围52—62bit,共11位(bit),介码有效范围为1—2046,指数有效范围为-1022—1023。示例中,介码(M) = 1023 + 2 = 1025,二进制数字表示为 100 0000 0001‬。


    符号域:

      数据为63bit,占1位(bit),0表示正数,1表示负数。


    bit(位) 63bit (52-62)bit (0-51)bit
    实数 5.25000012345 0 100 0000 0001 0101 0000 0000 0000 0000 0000 1000 0100 1000 1101 1010 1101 0111
    1.4-5 实数5.25000012345组成部分

      参考图1.4-5 实数5.25000012345组成部分,我们得到二进制数字0100 0000 0001 0101 0000 0000 0000 0000 0000 1000 0100 1000 1101 1010 1101 0111,十六进制 0x4015 0000 0848 DAD7‬‬。


    1.4.7 双精度浮点数取值范围

      双精度浮点数由于拥有更多的存储空间,较于单精度浮点数而言,可以提供更精准的数据信息,双精度浮点数正数指数最大有效值是1023,得到正数最大值接近2 * 2^1023,VS2010编译器中为1.7976931348623158e+308;负数指数最小有效值是-1022,可以得到正数最小值接近2 * 2^-1022,VS2010编译器中为2.2250738585072014e-308。负数最大值接近 -2 * 2^-1022,负数最小值接近 -2 * 2^1023;在大部分编译器中,双精度浮点数可以表示包含小数在内的16-17位十进制数字。


    1.5 本章总结

      本章节,我们了解了C语言的基本类型和不同的类型运算方式,日常编程中,我需要做到正确选择类型、正确使用类型,这样可以避免数据存储造成的信息错误、程序异常崩溃等问题。本章节内容稍微有些复杂,需要多次学习才能完全理解,初期做到类型可以灵活使用就好,中后期再来回顾本章节,应该会有新的发现。


    1.6 练习题

    1. 无符号短整型与有符号短整型有哪些区别?
    2. 使用十进制数字4096转换到二进制、八进制和十六进制。
    3. 参考Ascll码表,输出换行、空格和字符’A’。
    4. 短整型、整形和长整形分别占用几个字节?数字123456789使用哪个类型保存比较适合?
    5. 实数12.625转换到十六进制。
    6. 实数0xC0C8 1CA8 0000 0000转换到十进制。

    目录预览


    <一起学习C语言:C语言发展历程以及定制学习计划>
    <一起学习C语言:初步进入编程世界(一)>
    <一起学习C语言:初步进入编程世界(二)>
    <一起学习C语言:初步进入编程世界(三)>
    <一起学习C语言:C语言数据类型(一)>
    <一起学习C语言:C语言数据类型(二)>

    展开全文
  • 本章节,我们学习C语言数据类型,了解类型的同时并学习二进制数字转换为八进制、十进制和十六进制等内容。 章节预览: C语言数据类型 1. 数据类型 1.1 位与字节 1.2 整数类型 1.2.1 短整型 上一章内容: 正文: ...
  • 一起学习C语言:C语言数据类型(二)

    千次阅读 2020-01-31 00:21:01
    一起学习C语言:C语言数据类型(一)>中,我们了解到“位与字节”的含义,并分析无符号短整形和有符号短整形的运算方式。本篇文章中,我们进行分析二进制到八进制、十六进制转换等内容。 章节预览: 1.2.2 无符号...
  • C语言数据类型及值域

    千次阅读 2017-07-29 18:25:06
    C语言数据类型及值域:
  • C语言数据类型与三大结构

    千次阅读 2020-02-01 15:14:08
    C语言数据类型与三大结构 数据类型 C语言数据类型可以分为基本类型和派生类型。 基本类型:整型,字符型,浮点型,布尔型。 派生类型:指针类型,枚举类型,数组类型,结构体类型,共用体类型 在不同的编译器环境...
  • C语言数据类型浮点型

    2019-03-06 22:05:20
    C语言数据类型浮点型 ** 写博文打卡第二波。今天记下C语言的浮点数据类型。 浮点数据类型:单精度(float)和双精度(double)。两者的原理是一样的。 1. 第一步:如何求解原码、反码、补码 我们以8位计算。 正数的原反...
  • STM32——C语言数据类型 在编程过程中,不同的CPU,其数据类型的意义各不相同,所以一定要注意相应变量数据类型的定义和转换,否则在计算中可能会出现不确定的错误。 (一)C语言中的种类数据 整型:int short ...
  • C语言数据类型占内存大小

    千次阅读 2019-05-19 10:22:06
    C语言数据类型 使用sizeof计算各数据类型占用内存大小 #include<stdio.h> int main() { typedef struct { int a ; char b; int c; }struct_test_t; typedef enum{ test1 =1, test2, test3,...
  • C语言数据类型的强制转换

    千次阅读 2015-01-18 10:34:26
    C语言数据类型的强制转换
  • C语言数据类型级别由高到低

    千次阅读 2020-02-17 10:33:36
    数据类型,很多的编程爱好者都不陌生,小编今天记录一下数据类型级别由高到低,方便日后查阅,提前做个总结,同时也希望小编的一个文字总结,能快速的帮到困惑着解决问题,那么C语言数据类型级别由高到低如下: ...
  • C语言数据类型总结

    千次阅读 2018-09-01 09:38:43
    类比是学习一门新语言的好方法,下面我们类比java语言来看一下C语言的的数据类型。  C语言提供了丰富的数据类型,下面这张图可以很好的表现C语言所有的数据类型:  从中可以看到C语言提供java了语言没有的结构体、...
  • c语言数据类型在内存中的存储方式

    千次阅读 2019-09-22 10:34:48
    c语言数据类型在内存中存储方式 关于这个问题,这两天一直在思考,声明一个变量的数据类型,肯定是在内存中有记录,否则怎么表示为此类型呢? 网上的多数的解释不够详尽,大概意思就是说,数据类型与数据存储无关,...
  • C语言数据类型所占字节数

    千次阅读 2016-06-21 16:09:24
    C语言数据类型所占字节数: (1)16位编译器: char :1个字节 unsigned char :1个字节 char*(即指针变量):2个字节 short : 2个字节 unsigned short : 2个字节 int: 2个字节 unsigned int : 2个字节 long: 4个...
  • C语言数据类型的定义

    2020-05-25 08:04:32
    数据类型的定义 1、数据类型的定义 变量的定义: 数据类型 变量名【标识符】 变量的赋值: 变量名 = 值; 数据类型 变量名【标识符】 = 值 标示符的命名规则: 1、字母、数字、下划线 2、不能以数字开头 3、见名知义...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,127
精华内容 15,250
关键字:

c语言数据类型

c语言 订阅