精华内容
下载资源
问答
  • 下面列举几个整数常量的实例: 212 以下是各种类型的整数常量的实例: 85 浮点常量 浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。 当使用小数形式表示时,...
    学习C、查阅C基本语法好去处:
    C 语言教程 | 菜鸟教程www.runoob.com
    5a26f0a52cd9408e74e582b4f63b6bd5.png

    嵌入式C的好习惯:

    ①、常量定义为大写字母形式

    ②、在指针变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。


    数据类型:

    83c27e542a01878e66ccef6be9fc708a.png

    各数据类型取值范围:

    bf7ee39410fa08b8b237bb0597d796fc.png

    1、数据的 移位、置1、清0、取反

    移位 :??>>x ??右移x位

    例如:x=PB_IDR>>2&0x01怎么理解?

    PB_IDR>>2是将PB_IDR中的数据右移两位,&0x01是求与,这样x即为PB引脚2的状态

    置1: a |=(1<<x); a的第x位置1

    清0:a &= ~(1<<x); a的第x位清0

    取反:a^=(1<<x); a的第x位取反


    2、 结构体 struct

    结构体类似于面向对象语言中的属性类的定义,是用户自己定义的数据结构。

    结构体定义方法:

    ①、 	 

    结构体变量的使用形式:

    结构体变量名

    结构体指针:

    要知道,指针就是地址,那结构体指针就是结构体首地址。

    而指针变量是存放地址的容器,结构体指针变量是存放结构体的首地址容器。

    struct 

    访问其中一个结构体元素的成员变量

    结构体指针名

    等同于


    3. extent

    变量的声明有两种情况:

    1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。

    2、另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。 例如:extern int a 其中变量 a 可以在别的文件中定义的。

    extern 

    如果需要在一个源文件中引用另外一个源文件中定义的变量,我们只需在引用的文件中将变量加上 extern 关键字的声明即可。


    4.常量格式:

    整数常量

    整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。

    整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。

    下面列举几个整数常量的实例:

    212         

    以下是各种类型的整数常量的实例:

    85         

    浮点常量

    浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。

    当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。带符号的指数是用 e 或 E 引入的。

    下面列举几个浮点常量的实例:

    3.14159       

    转义字符

    01ebd48b9ec10b3f1c82ca59dbdbe3c1.png

    5. 嵌入C语言 预处理

    ==预处理==命令可以改变程序设计环境,提高编程效率,

    它们并不是 C 语言本身的组成部分,不能直接对 它们进行编译,必须在对程序进行编译之前,先对程序中这些特殊的命令进行“预处理” 。
    经过预处理后,程序就不再包括预处理命令了,最后再由编译程序对==预处理==之后的源程序进行==编译==处理,得到可供执行的目标代码。

    所有的预处理器命令都是以井号(#)开头。

    C 语言提供的预处理功能有三种,分别为==宏定义==、文件包含和条件编译。

    //========宏定义=========================
    

    预处理器运算符
    C 预处理器提供了下列的运算符来帮助您创建宏:①宏延续运算符()
    一个宏通常写在一个单行上。但是如果宏太长,一个单行容纳不下,则使用宏延续运算符()。例如:

    #define  message_for(a, b)  
    

    ②字符串常量化运算符(#)

    在宏定义中,当需要把一个宏的参数转换为字符串常量时,则使用字符串常量化运算符(#)。例子如上。

    ③标记粘贴运算符(##)

    宏定义内的标记粘贴运算符(##)会合并两个参数。它允许在宏定义中两个独立的标记被合并为一个标记。

    #include 

    当上面的代码被编译和执行时,它会产生下列结果:

    token34 

    6. #define 宏定义

    宏定义只是将一段字符取了另一个名字,在编译器预处理时会将其还原回其原有的样子。

    使用创建常量

    #define identifier value
    

    带参宏定义:

    /*带参宏定义*/
    #define M(y) y*y+3*y

    宏定义优点:

    宏只占编译时间,函数调用则占用运行时间,每次执行都要载入,所以执行相对宏会较慢。宏定义在编译期间即会使用并替换,而全局变量要到运行时才可以。

    所以,适当的时候,我们可以用宏定义来代替一些变量或函数。

    例如:

    int 

    我们可以使用宏重写上面的代码,如下:

    #define square(x) ((x) * (x))  
    

    7. const 创建常量

    const int Max=100; 则Max++会报错。


    8. 位域

    位域是为了防止资源空间浪费而在结构体定义属性长度的语法,在结构内声明位域的形式如下:

    struct
    

    例如:

    如果程序的结构中包含多个开关量,只有 TRUE/FALSE 变量,如下:

    struct
    

    这种结构需要 8 字节的内存空间,但在实际上,在每个变量中,我们只存储 0 或 1。在这种情况下,C 语言提供了一种更好的利用内存空间的方式。如果您在结构内使用这样的变量,您可以定义变量的宽度来告诉编译器,您将只使用这些字节。例如,上面的结构可以重写成:

    struct
    

    这样节省了空间。

    超出位域一般编译器会有警告,数据只会保留位域宽度内的部分。


    9.typedef

    C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。

    例如:

    typedef 

    typedef 与 #define的区别

    #define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同:

    • typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
    • typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。

    10.指针

    指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。

    type 

    例如:

    int    

    所有实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,对应指针的值的类型都是一样的,都是一个代表内存地址的长的十六进制数。

    把变量地址赋值给指针

    ip 

    访问指针变量中可用地址的值

    printf

    NULL 指针

    在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。

    指针运算

    C 指针是一个用数值表示的地址。因此,您可以对指针执行算术运算。

    指针数组

    可以创建一个指针数组用循环语句指向一个数组

    ptr

    也可以用一个指向字符的指针数组来存储一个字符串列表

    const 

    指针的指针

    指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。

    一个指向指针的指针变量必须如下声明,即在变量名前放置两个星号。

    int 

    传递指针给函数

    C 语言允许您传递指针给函数,只需要简单地声明函数参数为指针类型即可。

    void 

    能接受指针作为参数的函数,也能接受数组作为参数

    int 

    从函数返回指针

    C 允许您从函数返回指针。为了做到这点,您必须声明一个返回指针的函数

    int 

    另外,C 语言不支持在调用函数时返回局部变量的地址,除非定义局部变量为static变量。


    11.函数指针

    函数指针是指向函数的指针变量。函数指针可以像一般函数一样,用于调用函数、传递参数。

    typedef 

    例如:

    #include 

    12.枚举

    枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读。

    enum 

    例如:

    enum 

    这样 MON即为0 TUE为1.。。。。。。。

    也可以自行编号,但真的没必要;

    枚举类型的变量

    定义完枚举类型后我们应该定义枚举类型的变量

    ①先定义,再实例

    enum 

    ②定义的同时实例化

    enum 

    ③匿名枚举实例化

    enum
    

    上面的语句就相当于 #define MON 1


    13.sizeof

    sizeof是c语言中用来求字节运算符

    sizeof(基本数据结构)

    这里的基本数据类型是指short、int、long、float、double这样的简单内置数据类型。

    由于它们的内存大小是和系统相关的,所以在不同的系统下取值可能不同。

    sizeof(数组)

    u8 

    当sizeof的对象是数组时,返回数组总字节大小,而当对象是指针时,返回指针本身的大小,而不是指示内存空间的大小。

    注意:1)当字符数组表示字符串时,其sizeof值将’/0’计算进去。

    2)当数组为形参时,其sizeof值相当于指针的sizeof值。

    sizeof(指针)

    当对象是指针时,返回指针本身的大小,而不是指示内存空间的大小

    sizeof(函数)

    sizeof也可对一个函数调用求值,其结果是函数返回值类型的大小,函数并不会被调用。

    注意:1)不可以对返回值类型为空的函数求值。

    2)不可以对函数名求值。

    3)对有参数的函数,在用sizeof时,须写上实参表。

    sizeof(结构体)

    结构体的sizeof涉及到字节对齐问题。为什么需要字节对齐?计算机组成原理教导我们这样有助于加快计算机的取数速度,否则就得多花指令周期了。为此,编译器默认会对结构体进行处理(实际上其它地方的数据变量也是如此),让宽度为2的基本数据类型(short等)都位于能被2整除的地址上,让宽度为4的基本数据类型(int等)都位于能被4整除的地址上,依次类推。这样,两个数中间就可能需要加入填充字节,所以整个结构体的sizeof值就增长了。

    一般不会求解此项(除非为了对比结构体和共用体 )。

    空结构体(不含数据成员)的sizeof值为1。

    sizeof(联合体)

    结构体在内存组织上是顺序式的,联合体则是重叠式,各成员共享一段内存;所以整个联合体的sizeof也就是所有成员sizeof中的最大值。


    14.typeof

    C语言中 typeof 关键字是用来定义变量数据类型的。


    15. 联合体(共用体)

    联合体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。

    共用体不是一个集合类型!!!不能存多个数据!!他只是一个类型可变的数据。

    为了定义共用体,您必须使用union语句,方式与定义结构类似。union 语句定义了一个新的数据类型,带有多个成员。union 语句的格式如下:

    union 

    例如:

    union 

    共用体占用的内存应足够存储共用体中最大的成员。例如,在上面的实例中,Data 将占用 20 个字节的内存空间,因为在各个成员中,字符串所占用的空间是最大的。下面的实例将显示上面的共用体占用的总内存大小:

    #include 

    为了访问共用体的成员,我们使用成员访问运算符(.)。成员访问运算符是共用体变量名称和我们要访问的共用体成员之间的一个句号。您可以使用union关键字来定义共用体类型的变量。

    include 

    运行结果:

    data.i : 1917853763
    data.f : 4122360580327794860452759994368.000000
    data.str : C Programming

    我们可以看到共用体的if成员的值有损坏,因为最后赋给变量的值占用了内存位置,这也是str成员能够完好输出的原因。

    16.“->”

    ->是一个整体,它是用于指向结构体子数据的指针,用来取子数据。

    换种说法,如果我们在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到“->”。

    问题中的p=p->next ,意思是将p指向的一个结构体实例中的自数据next赋值给p。

    4ba0263700c975c27b7705ee60d69a11.png

    17. #include <??.h> 和 #include "??.h"的区别

    #include <stm32f10x.h> 和 #include "stm32f10x.h"的区别是

    <>表示去软件根目录中找这个头文件

    “” 表示在项目目录下找头文件

    18. 宏注释

    # if 0
    //想被注释的代码
    #end if

    19.stdbool.h

    bool 是C++中的关键字,C中不支持

    所以C99标准中引入了头文件 stdbool.h,包含了四个用于布尔型的预定义宏

    #define true 1

    #define false 0

    #define bool _Bool

    typdef int _Bool

    20.static关键字的作用

    1.隐藏

    一个函数如果加了static,就会对其它源文件隐藏。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。

    对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用。

    2.保持变量内容的持久

    存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。

    3.默认初始化为0

    其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有元素都置0,然后把不是0的几个元素赋值。如果定义成静态的,就省去了一开始置0的操作。再比如要把一个字符数组当字符串来用,但又觉得每次在字符数组末尾加' 0'太麻烦。如果把字符串定义成静态的,就省去了这个麻烦,因为那里本来就是'0'。

    21.跨文件全局变量

    要跨文件(同一个工程中)使用同一个变量(值同步改变),变量声明和定义方法:

    例:

    首先在aaaa.c定义全局变量:int y,并在aaaa.h中声明:extern int y;

    在另外一个xxx.c文件中想要使用上述变量,包含头文件aaaa.h即可使用。

    展开全文
  • “要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一”——包租婆这道理放在C语言学习上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要...

    “要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一”

    ——包租婆这道理放在C语言学习上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。那么如何学习呢?当然是每天都练习一道C语言题目!!

    cecce6e25f27b45c6e803ddd822240cf.png

    作者

    闫小林

    白天搬砖,晚上做梦。我有故事,你有酒么?

    例1:有人用温度计测量出用华氏温度98°F,现在要求用C语言实现把它转换为以摄氏法表示的温度。解题思路:这个问题的算法很简单,关键在于找到二者之间的转化公式,摄氏度等于九分之五乘以华氏度减去32的积,也就是:
    centigrade=(5.0/9)*(f_Degree-32);
    源代码演示:
    #include//头文件 int main() //主函数 {float f_Degree,centigrade; //定义浮点型变量 
       f_Degree=98.0;//初始化华氏度变量
       centigrade=(5.0/9)*(f_Degree-32);//注意此处应该是5.0 printf("华氏度98的摄氏度为:%f\n",centigrade);//输出结果 return 0;//函数返回值为0
     }
    编译结果:
    华氏度98的摄氏度为:36.666668
    --------------------------------
    Process exited after 1.796 seconds with return value 0
    请按任意键继续. . .
    读者应该会很容易的看懂这道例题,但是有一点需要读者格外的注意,就是这行代码
    centigrade=(5.0/9)*(f_Degree-32);
    如果写成
    centigrade=(5/9)*(f_Degree-32);
    那么就会出现逻辑性错误,如下输出:
    华氏度98的摄氏度为:0.000000
    --------------------------------
    Process exited after 1.967 seconds with return value 0
    请按任意键继续. . .
    为什呢么?在C语言中不声明格式,这种整数相除的被除数比除数大的,会直接等于0,没有小数点后面的数字。C语言学习路线    C语言开发工具C++学习路线    C#学习路线

    3135b8c0bd4900560719225804909326.png

    更多干货尽在C语言入门到精通

    展开全文
  • 前言相比int等整型,float等浮点类型的表示和存储较为复杂,但它又是一个无法回避的话题,那么就有必要对浮点一探究竟了。在计算机中,一般用IEEE浮点近似表示任意一个实数,那么它实际上又是如何表示的呢?IEEE浮点...

    前言

    相比int等整型,float等浮点类型的表示和存储较为复杂,但它又是一个无法回避的话题,那么就有必要对浮点一探究竟了。在计算机中,一般用IEEE浮点近似表示任意一个实数,那么它实际上又是如何表示的呢?

    IEEE浮点表示

    IEEE浮点标准用

    dd37172f431a4758de3e9237857d0823.png

    的形式近似表示一个数。并且将浮点数的位表示划分为三个字段:

    • 符号(sign)s决定这个数是负数(s=1)还是正数(s=0)。可以用一个单独的符号s直接编码符号s。
    • 尾数(signficand)M是一个二进制小数,它的范围是1~2-ξ或者是0~1-ξ。
      n位小数字段

    ec9abea1c9aec25724f6dac491842bd2.png

    编码尾数M。

    • 阶码(exponent)E的作用是对浮点数加权,这个权重是2的E次幂(可能是负数)。k位的阶码字段

    2acf94ab0753b0860eb7dfa33806a2e4.png

    编码阶码E。

    在单精度浮点格式(c语言的float)中,s,exp和frac字段分别为1位,8位和23位,而双精度浮点格式(c语言中的double)中,s,exp和frac字段分别为1位,11位和52位。
    一个浮点数的常见比特位表示如下:

    4883030f080d8feac833f5774d55c531.png

    而根据exp的值,被编码的值可以分为三大类不同的情况。下面进行一一解释。

    情况1:规格化的值

    即最普遍的情况,当exp,即阶码域既不为全0,也不为全1的情况。在这种情况下,阶码字段解释为以偏置(biased)形式表示有符号整数,即E=exp-Bias,exp是无符号数(1~254)。Bias是一个等于

    57abd97c96b9645b3aa08d2738b00388.png

    的偏置值,对于单精度来说,k=23,Bias=127,因此E的范围是-126~+127。

    frac被描述为小数值,且0≤frac<1,其二进制表示为0.frac。尾数定义为 M=1+frac ,则M=1.frac。那么就有1≤M<2,由于总是能够调整阶码E,使得M在范围1≤M<2,所以不需要显示的表示它,这样还能获得一个额外的精度位。也就是说,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的frac部分,等到读取的时候,再把第一位的1加上去。

    情况2:非规格化的值

    当exp,即阶码域为全0时,所表示的数便为非规格化的值,该情况下的阶码值E=1-Bias(注:为从非格式化值转换到格式化值提供了一种方法)。尾数M=frac

    非规格化的数有两个作用。

    • 表示数值0。格式化数中,我们总使得M≥1,因此就无法表示0。而阶码全0时,且尾数也全0时,就可以表示0了。
    • 表示接近0.0的数。它所表示的值分布地接近于0.0,该属性成为逐渐溢出。

    情况3:特殊值

    有两种

    • 阶码全为1,小数域全为0。它得到值为 +∞(s=0)或-∞(s=1),它在计算机中可以表示溢出的结果,例如两个非常大的数相乘。
    • 阶码全为1,小数域不全为0。它得到值为NaN(Note a Number)。它在计算机中可以表示非法的数,例如计算根号-1时的值。

    浮点数的范围和有效位

    对于浮点数,其能表示的数值范围和其有效位如下

    类型比特位数值范围有效位

    fe7af82ec2a1e4e6494ff591a5985458.png

    可见同比特位数的整型(例如int)要比浮点数(例如float)能表示的数值范围要小很多,但是需要注意的,虽然浮点数能表示的范围大,但是 它却不能精确表示在其范围内的所有实数,也就是说,它只能保证有效位的值是精确的,当表示的数值(小数部分)超过有效位时,所表示的数是无法保证精确的,甚至可以说是错误的。
    那么浮点数的数值范围和有效位是如何得到的呢?

    浮点数的数值范围计算

    有了前面了基础,我们就可以来计算浮点数的数值范围了。以单精度(float)为例,我们知道它的指数范围(即E)为-126~+127,而M的范围为1≤M<2,实际上,对于单精度,1≤M≤2-2^(-23)(注:23为frac字段所占的比特位)。那么我们就可以得到单精度的最大值为:

    305c49e086e7ced8cac30cc908dcfef9.png


    同理,我们可以得到单精度的最小值为:

    ef1bee7aa8a79521d112e62896db75dd.png

    我们仅仅以单精度为例,用同样的方法可以计算其他精度的浮点数数值范围,在此不再赘述。

    浮点数的有效位

    有效位也可以理解为我们常说的精度。浮点数的精度是由尾数的位数来决定的。
    对于单精度(float),它的尾数为23位,而2^23=8388608,共7位,也就是说最多能有7位有效数字,但至少能保证6位,因此其有效位为6~7位。当然我们可以通过下面的内容进一步理解。以下计算结果保留10位小数。

    8050401fb7cbc62654d2952a5920befe.png

    486f1d0737f0f95be9c488646cf188d5.png

    e8496217b571453dfd6dfae891f2d04d.png


    观察a和b的结果可以发现,0.0000001和0.0000002之间的其他数是没有办法通过单精度浮点数来精确表示的,也就是说,只有到小数点后面7位的值才是精确的,同理,观察b和c的结果,0.0000002到0.0000004之间的其他数也是不能通过单精度浮点数精确表示的,更不幸地是,这之间的数,甚至只能精确到第6位。

    这也就有了单精度浮点数的有效位为6~7位的结论。根据相似的方法,我们同样可以得到双精度浮点数的有效位为15~16位的结论,这里不再赘述。

    浮点数在内存中的存储

    了解了这么多,我们来看一下一个小数究竟是如何在内存中存储的。以float f = 8.25f为例。其二进制表示为

    6c56f3003b3a6c43db8aa59a4d4ef271.png

    ,可见指数实际值为3,则根据E=exp-Bias,可知exp=E+Bias=3+127=130,根据M=1+frac,可知,frac=M-1=0.0001(二进制)而

    21db50acd7e64ba68c3783a4270df93d.png


    因此不难得到,8.25的在内存中的存储情况为:

    d21484d404cccc46663e074e68dc8ea9.png

    如果这个时候把这个值作为整型使用,是多少呢?没错,是1090781184

    #include

    再说几句

    关于浮点数,需要再说几句:

    • 在二进制,第一个有效数字必定是“1”,因此这个“1”并不会存储。
    • 浮点数不能精确表示其范围内的所有数。
    • 可精确表示的数不是均匀分布的,越靠近0越稠密。
    • 默认舍入方式为向偶舍入,也被称为最接近的值舍入。
    • 不遵守普遍的算术属性,比如结合律。

    本文最新内容地址:浮点数在计算机中是怎样表示的

    微信公众号【编程珠玑】:专注但不限于分享计算机编程基础,Linux,C语言,C++,数据结构与算法,工具,资源等编程相关[原创]技术文章,号内包含大量经典电子书和视频学习资源。欢迎一起交流学习,一起修炼计算机“内功”,知其然,更知其所以然。

    参考文章:

    https://zh.wikipedia.org/zh-hans/IEEE_754zh.wikipedia.orgCS:APP3e, Bryant and O'Hallaroncsapp.cs.cmu.edu
    展开全文
  • 需要关注的大概为:如何创建整型表,如何插入整型数据以及需要注意是否为无符号类型,至于对于表的一些操作还是需要大家自己去康康表操作啦,相关表操作:MySQL基础学习之大战表操作:列类型:浮点数学过C语言的大概...
    30bc79fd390584cefb8acfbe6894968b.png

    点击这里关注"程序员Bob"

    9a4eb47bbf21b37b5d1b99d3f9445c07.png6603ffbffc11743ffb9c3b67e36b4484.png

    I am not afraid of tomorrow for I have seen yesterday and love today.我不害怕明天,因为我经历过昨天,又热爱今天。

    771c0eebcbcfc6c6df8036a95a79b6f0.png小编有好几天没写MySQL了,还记得在那天晚上突然觉得有点不习惯,怀念平时写文章的那种感觉以及排版带来的美感(虽说小编的排版也属实不咋地f8bd2f1060e0d12b39797883c58cd22a.pngf8bd2f1060e0d12b39797883c58cd22a.pngf8bd2f1060e0d12b39797883c58cd22a.png,但还是会经常变变风格啥的,哈哈哈)。上次小编已经将SQL的三大操作(库操作,表操作以及数据操作)简单介绍完啦,后面还会有相关的列类型和列属性以及索引...今天就先来介绍MySQL的列类型啦,说到SQL的数据类型,其实有很多和C语言差不多的,比如整数类型,浮点数类型,字符串类型等等,当然其中也会有改动,都有各自的特点。这里就先介绍SQL数值类型中的整数类型和浮点数类型啦~3d4cf6b8f1c048e23a6e8caf31d45245.gifSQL:数据类型数据类型:所谓的数据类型,其实是对数据进行统一的分类,从系统的角度来看是为了能够使用统一的方式进行管理,从而更好的利用有限的空间。SQL中将数据类型分成了三大类:数值类型,字符集类型和时间日期类型。大致示意图如下:

    f6c8defcbe8ac8da84c5ba04360b5445.png

    数值型:这一听就知道是数值啦,系统将相关数值分成了整数类型和小数类型。列类型:整数型整数型:存放整型数据,在SQL中更多的是需要考虑如何节省磁盘空间,所以系统将整形细分成了5类:
    1. Tinyint(常用):使用一个字节存储表示的状态最多为256种(八个字节最大表示256个)

    2. Smallint:使用2个字节存储,表示的状态最多为65536

    3. mediumint:使用3个字节存储

    4. int(常用):使用四个字节存储

    5. Bigint:使用八个字节存储

    0061f9745249563506f9891b3ba6857f.png

    在表中创建相关整数类型:
    --  创建整形 create table my_int( int_1 tinyint, int_2 smallint, int_3 int, int_4 bigint  )charset utf8;
    • 创建一张整形表(如上):插入数据:只能插入范围内的整型

    在表中插入相关数据:

     -- 插入数据insert into my_int values (100,100,100,100);  -- 有效数据insert into my_int values ('a','b','199','f');  -- 无效数据insert into my_int values (255,10000,100000,1000000);  -- 错误:超出范围

    分别执行如下:

    09afd34bfeb9333b1f0bf2ab47c39be8.png

    在SQL中,数值类型全部都是默认为有符号,比如正负。

    而有时候需要使用无符号数据限定,例如需要给数据类型进行限定(使用):int unsigned;- -无符号:

    从0开始语句:alter table my_int add int_5 tinyint unsigned;

    执行如下:

    9b3a730b725f6a7ea6f2e7aa34ffc6a3.png

    根据需要,有时候会在类型中添加零填充,如:zerofill(零填充)→自动变成无符号。其意义(显示宽度):保证数据格式(比如在需要用年月份时)相关语句:
    alter table my_int add int_7 tinyint(2) zerofill;insert into my_int values (1,1,1,1,1,1,1);insert into my_int values (100,100,100,100,100,100,100);
    执行如下:

    f6f09b9b9a36e2cbf226276031c8c49b.png

    To:在使用整型数据时,需要关注的大概为:如何创建整型表,如何插入整型数据以及需要注意是否为无符号类型,至于对于表的一些操作还是需要大家自己去康康表操作啦,相关表操作:MySQL基础学习之大战表操作列类型:浮点数学过C语言的大概都清楚浮点数类型啦,简单来说就是小数,但在SQL中又有所不同。小数型:带有小数点或者范围超出整型的数值范围。在SQL中:由于系统的需要,将小数细分成两种:浮点型(小数点浮动,精度有限,且会丢失精度)和定点型(小数点固定,精度固定,不会丢失精度)浮点型:浮点型数据是一种精度型数据,因为超出指定范围之后,会丢失精度(自动四舍五入)。浮点型理论分为两种:
    • float(单精度):占用4个字节存储数据,精度范围大概为7位左右

    • double(双精度):占用8个字节存储数据,精度范围大概为15位左右

    创建浮点数表创建浮点数表,浮点的使用方式:直接float表示。用法:float(M,D)【M代表总长度,D代表小数部分长度,整数部分长度为M-D】

    相关语句:

    -- 浮点数(10位在精度范围之外,6位在精度范围之内)create table my_float(f1 float,f2 float(10,2),f3 float(6,2))charset utf8;
    执行如下:

    d15cc70bfae3d29d0323df32606e4cd6.png

    插入数据:可以直接是小数,也可以是科学计数法浮点型数据的插入:整形部分不能超出长度,但小数部分可以超出长度(系统会自动四舍五入)相关语句:
    -- 插入数据insert into my_float values (1234.10,1234.10,1234.10);-- 符合条件insert into my_float values (123456789,12345678.99,9999.99);-- 最大值insert into my_float values (3e38,3.01e7,1234.56);  -- 科学计数法
    上面是符合规范的,下面演示相关错误语句:
    -- 超出长度的限制insert into my_float values (123456,1234.12345678,123.1234567);  -- 小数部分可行,整数部分超出(不会报错)insert into my_float values (123456,1234.12,12345.12);  -- 整数部分超出(会报错)
    执行如下:

    bd6f859e46ce24d78d081583bc9254e0.png

    fcfb7cb5674f8d5c1f004a3333974688.png

    往期推荐:

    洛谷 || 最厉害的学生

    2020-10-18

    d420a686b655d9c453de630253449479.png

    MySQL基础学习之大战数据操作

    2020-10-17

    609207819e5e6a030a27d33261d92b6e.png

    关于小编

    2020-10-06

    cc39a46559fbbba0fee4808ebab7ffa9.png

    为你,千千万万遍.

    关注程序员Bob公众号,与你一起终生学习

    6408939bf0c64beb5d339411883a7bca.png

    一键三连,就差你了12e1498883fbbc0b988ad389ce9cd02a.png
    展开全文
  • 自己遇到了浮点运算的错误,打印出来获得的浮点数总是inf、-inf、nan。郁闷了两天,网上搜了一下才搜到正解,gnu就是牛啊。 自己程序中发现使用浮点协处理器优化处理这三个值耗时更长。反而不加浮点优化,处理这三...
  • C语言常见错误

    2016-11-02 20:10:02
    1、 拼写错误,尤其是include,main,void,float等词。C语言的32个关键字与基本含义如下: double :声明双精度变量或函数 int: 声明整型变量或函数 char :声明字符型变量或函数 float:声明浮点型变量或函数 ...
  • C语言关于浮点型赋值的注意事项 无论是float 还是 double 赋值的时候都要注意下面几点: 注意赋初值,且若要为0 则赋值 0.0 而不是 0,因为这样更规范,例如要赋值3,则 赋值 3.0; 参与运算并把结果赋予浮点型时...
  • C语言中函数浮点形参的分析研究,李震平,李海颖,在使用Turbo C语言开发程序时,并非需要将函数的形参float类型数据进行转换为double,也并非Turbo C在处理此类问题时存在缺陷和错误。本��
  • c语言常见拼写错误

    2016-11-10 22:52:00
    1、 拼写错误,尤其是include,main,void,float等词。C语言的32个关键字与基本含义如下: double :声明双精度变量或函数 int: 声明整型变量或函数 char :声明字符型变量或函数 float:声明浮点型变量或函数 ...
  • 在学习C语言中的if语句中,我遇到了变量与零值进行比较的一些问题,当比较的数值为浮点变量时,不能直接用 if (x == 0.0)或者 if (x != 0.0) ,由于float和 double类型的数据都是有精度限制的,所以0.0000...0001=0...
  • 最近在用习语言重写谭浩强老师的经典著作-《C语言程序设计》,再用习语言重写其中的一些例子时,发现存在一些错误。不知是网络电子版的不准确,还是原书确实存在错误。 如: 356f, 书中认为是浮点表示,其实是错误...
  • C语言基础教程源码

    2018-12-13 09:34:00
    C源码示例 C源码示例 C语言文件扩展名 第一个C程序 C语言度量单位转换 C语言函数 ...C语言语义错误 ...C语言打印int值 ...C语言打印八进制和十六...C语言打印输出浮点类型 C语言浮点数舍入错误 C语言整型大小 C语...
  • c语言头文件

    2021-03-31 23:40:06
    errno.h:定义了通过错误码来回报错误资讯的宏 fenv.h:声明一组函数和宏以及特定类型,以访问浮点环境 float.h:提供了浮点型的范围和精度的宏,一般用于数值分析 inttypes.h:提供整数输入的各种转换宏 iso646.h:定义...
  • C语言面试54题​大家好,这期呢,我们谈一下c语言的面试题。第1题,c语言有哪些核心的特征?可移植性很强。模块化能力很强。灵活性很高。加载速度和执行速度都很好。可扩展性很强。第2题,c语言中有哪些基本的数据...
  • 大部分人会认为是1,下面,通过浮点运算带给大家不一样的答案 1、案例程序: #include <stdio.h> int main (void) { float a, b; b = 2.0e20 + 1.0; a = b - 2.0e20; printf("%f \n",a); return 0; }...
  • 大家好,C语言中自加自减——最简单的运算符操作了,也是前后缀——最容易搞混的语法,今天把它搞得明明白白。在前缀运算符中,例如 ++a,这个表达式的运算结果等价于 a = a+1,也就是说 (++a) == (a = a+1) 在该...
  • C语言基础

    2013-11-26 18:31:09
    1、C语言中的浮点 假设存在两个浮点变量x和y,精度定义为EPSILON = 1e-6,则错误的比较方式是: if(x == y) if(x != y) 应该转换成正确的比较方式: if(abs(x-y) ) //x等于y if(abs(x-y) > EPSILON) // x不等于y ...
  • C语言笔记

    2016-09-18 23:39:00
    C语言笔记 基础知识 数据类型 序号类型与描述1基本类型: 它们是算术类型,包括:整数类型、浮点类型2枚举类型: 也是算术类型,被用来定义只能使用某些整型值的变量,使用时需要程序员先使用eumn关键字来...
  • C语言面试54题​大家好,这期呢,我们谈一下c语言的面试题。第1题,c语言有哪些核心的特征?可移植性很强。模块化能力很强。灵活性很高。加载速度和执行速度都很好。可扩展性很强。第2题,c语言中有哪些基本的数据...
  • C语言面试54题​大家好,这期呢,我们谈一下c语言的面试题。第1题,c语言有哪些核心的特征?可移植性很强。模块化能力很强。灵活性很高。加载速度和执行速度都很好。可扩展性很强。第2题,c语言中有哪些基本的数据...
  • C语言面试54题大家好,这期呢,我们谈一下c语言的面试题。第1题,c语言有哪些核心的特征?可移植性很强。模块化能力很强。灵活性很高。加载速度和执行速度都很好。可扩展性很强。第2题,c语言中有哪些基本的数据类型...
  • 1.算术操作符+ - * / %% 只适用于整数类型运算,其余运算符也可用于浮点运算。2.移位操作符左移:左边丢弃,右边补0;右移: 不同编译器采取的移位方式不同,所有有了“右移”的程序不可移植 1.逻辑移位:左边补0...
  • c语言中的坑】c语言中的坑

    千次阅读 2018-10-22 20:21:07
    声明:本帖记录我考试中出现的c语言错误。 1、取模运算操作数,必须是整型,浮点型不能作为操作数 例如:3.14%2 是错误的 2.在打印输出 printf("%d",strlen("\\TOP\t\65\""));  输出...
  • C语言海鲜拼盘-01

    2021-02-16 14:53:37
    C语言基础 浮点类型: float,单精度浮点型,对应%f; double,双精度浮点型,对应%lf; 在用于输入时: double 类型使用了%f格式,会导致输入值错误。 float类型使用double类型不仅会导致输入错误,还可能引起程序...
  • C语言面试54题​大家好,这期呢,我们谈一下c语言的面试题。第1题,c语言有哪些核心的特征?可移植性很强。模块化能力很强。灵活性很高。加载速度和执行速度都很好。可扩展性很强。第2题,c语言中有哪些基本的数据...
  • c语言指针

    2015-12-10 21:23:00
    1、指针是和int char float一样的类型称为指针类型 用 *...浮点型指针 float * 3、注意:指针只能指向某块地址,不能指向一个常量值 例如 int *p = 10;这个就是错误的 &表示取地址,&a表示取a的地址 ...
  • 在关键字,标识符之间必须要有一个以上的空格符作间隔, 否则将会出现语法错误,例如把int a;写成 inta;C编译器会把inta当成一个标识符处理,其结果必然出错。 5.常量  C 语言中使用的常量可分为数字常量、字符...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 195
精华内容 78
关键字:

c语言浮点错误

c语言 订阅