精华内容
下载资源
问答
  • ![图片说明](https://img-ask.csdn.net/upload/202005/26/1590484237_122302.png) 哪位大佬能告诉我这种情况下输出为什么是这个?计算机内部发生了什么?
  • 整数类型 类型 存储大小 值范围 char 1 字节 -128 到 127 或 0 到 255 unsigned char 1 字节 0 到 255 signed char 1 字节 -128 到 127 int 2 或 4 字节 -32,768 到 32,767 或 -2,147,483,648 到 2,...

    数据的基本介绍

    在 C 语言中,变量的类型决定了变量开辟内存空间的大小,如何看待内存空间的视角。


    整数类型

    类型 存储大小 值范围
    char 1 字节 -128 到 127 或 0 到 255
    unsigned char 1 字节 0 到 255
    signed char 1 字节 -128 到 127
    int 2 或 4 字节 -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
    unsigned int 2 或 4 字节 0 到 65,535 或 0 到 4,294,967,295
    short 2 字节 -32,768 到 32,767
    unsigned short 2 字节 0 到 65,535
    long 4 字节 -2,147,483,648 到 2,147,483,647
    unsigned long 4 字节 0 到 4,294,967,295

    易错点:
    当给无符号对象赋一个负值,结果=(这个负数+无符号类型所表示总个数)%无符号类型所表示总个数。
    如果表达式中既有无符号又有有符号类型,带符号数自动转成无符号数。

    例子:

    //例一:
    //错误:变量u永远也不会小于0,循环条件一直成立。
    for(unsigned u=10;u>=0;u--){
    	printf("%d\n",u);
    }
    
    //例二:
    #include <stdio.h>
    int i;
    int main()
    {
        i--;
        if (i > sizeof(i))
        {
            printf(">\n");
        }
        else
        {
            printf("<\n");
        }
        return 0; 
    }
    //输出 > 注:当sizeof(i)的返回值是无符号类型,int为有符号类型,所以当i为一个很大的整数大于4,因此i>sizeof(i)成立。
    

    浮点类型

    类型 存储大小 值范围 精度
    float 4 字节 1.2E-38 到 3.4E+38 6 位小数
    double 8 字节 2.3E-308 到 1.7E+308 15 位小数
    long double 16 字节 3.4E-4932 到 1.1E+4932 19 位小数

    void 类型

    序号 类型与描述
    1 函数返回为空 C 中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status);
    2 函数参数为空 C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void);
    3 指针指向 void 类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。

    注意:各种类型的存储大小与系统位数有关。


    整形在内存中的存储

    原码、反码、补码

    对于整数在内存中的存储参见我另外一篇博客,应该是讲清楚了计算机在内存中为什么都会统一使用补码来存储整数。博客链接:彻底理解原码、补码、反码


    大小端介绍

    为什么有大小端之分?

    为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。
    例如一个 16bit 的 short 型 x ,在内存中的地址为 0x0010 , x 的值为 0x1122 ,那么 0x11 为高字节, 0x22为低字节。对于大端模式,就将 0x11 放在低地址中,即 0x0010 中, 0x22 放在高地址中,即 0x0011 中。小端模式,刚好相反。我们常用的 X86 结构是小端模式,而 KEIL C51 则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

    大端存储:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。
    小端存储:是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。

    解释:

    数据的高低位:数据的高低是相对的,十位相对于个位是高位,相对于百位又是地位。个十百千万数据位数依次增高。在计算机中数据的存储是以二进制存储的,比如10(0000 0000 0000 0000 0000 0000 0000 1010)从左向右数据位数依次减小。

    在这里插入图片描述

    练习

    练习一:

    //设计一个小程序来判断当前机器的字节序。
    int main()
    {
     
        int a=1;
        char *p=&a;
        
        if(*p){
        	printf("小端\n");
        }else{
        	printf("大端\n");
        }
        return 0;
    }
    
    

    在这里插入图片描述

    练习二:

    //CPU(32位小字节序处理器)
    #include<stdio.h>
    void main()
    {
        union
        {
            short k;
            char i[2];
        }*s, a;
        s = &a;
        s->i[0] = 0x39;
        s->i[1] = 0x38;
        printf("% d\n", a.k);
    }
    //输出结果是?
    
    

    在这里插入图片描述
    练习三

    int main() {
    	char a = -128;	//1000 0000
    	printf("%u\n",a);//变为无符号类型输出,类型提升到了unsigned int 
    					//原码:1000 0000 0000 0000 0000 0000 1000 0000
    					//反码:1111 1111 1111 1111 1111 1111 0111 1111
    					//补码:1111 1111 1111 1111 1111 1111 1000 0000
    					//结果为:4294967168
    	return 0;
    }
    
    

    练习四

    
    int main()
    {
    	char a[1000];
    	int i;
    	for (i = 0; i < 1000; i++)
    	{
    		a[i] = -1 - i;//-1 -2 -3 ... -128 127 126 125  ... 2 1 0 因此长度为 255
    	}
    	printf("%d", strlen(a));//255
    	return 0;
    }
    
    #include <stdio.h>
    unsigned char i = 0;
    int main()
    {
    	//死循环,将一直输出,因为无符号的范围为 0-255,这个条件将一直成立
    	for (i = 0; i <= 255; i++)
    	{
    		printf("hello world\n");
    	}
    	return 0;
    }
    

    浮点型在内存中的存储

    常见的浮点数:3.14159 1E10 浮点数家族包括: float、double、long double 类型。那么浮点数在内存中是怎样存储的呢?

    根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成下面的形式:(-1)^S * M * 2^E
    (-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。
    M表示有效数字:1<=M<2。
    2^E表示指数位。

    IEEE 754规定: 对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。(1 8 23规则)


    在这里插入图片描述


    IEEE 754规定: 对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。(1 11 52规则)


    在这里插入图片描述


    IEEE 754对有效数字M和指数E,还有一些特别规定。


    对有效数字M:

    1≤M<2 ,也就是说,M可以写成1.xxxxxx 的形式,其中xxxxxx表示小数部分。IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的xxxxxx部分。比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。


    对指数E情况比较复杂分三种情况:

    说明:E为一个无符号整数 这意味着,如果E为8位,它的取值范围为0-255;如果E为11位,它的取值范围为0-2047。但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。比如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。

    E不全为0或不全为1

    这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1。 比如: 0.5(1/2)的二进制形式为0.1,由于规定正数部分必须为1,即将小数点右移1位,则为1.0*2^(-1),其阶码为-1+127=126,表示为01111110,而尾数1.0去掉整数部分为0,补齐0到23位00000000000000000000000,则其二进制表示形式为。

    0 01111110 00000000000000000000000
    

    E全为0

    这时,浮点数的指数E等于1-127(或者1-1023)即为真实值, 有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。

    E全为1

    这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s)。

    举例说明:

    在计算机中所有数字都是按照二进制存储的,所以我们在要将浮点数转换为二进制,转换规则。
    先看符号位当s=0,V为正数;当s=1,V为负数。
    将V的整数部分先转化为二进制形式,再将小数部分转化为二进制形式(转化规则:小数部分乘以2,取整数部分依次从左往右放在小数点后,直至小数点后为0)。
    将V转换的整数部分和小数部分写在一起,写为科学计数法1.xxxxxxx*2^n的形式。
    M=小数点后的二进制,s根据上面三种情况求得,对于float中E不全为0或不全为1一般形式E=n+127所得的二进制。

    对于数字10.125:为正数S=0。10(1010),0.125(0.001),1010.001=1.010001*2^3 。因此E=3+127=130(10000010)。M=010001。所以10.125的计算机内存中的二进制表示法: 0 10000010 01000100000000000000000 (41 22 00 00)

    在这里插入图片描述
    注:我的计算机是小端存储所以是00 00 22 41。


    【例子】

    在这里插入图片描述

    int main()
    {
    	int n = 9;// 0  000 0000 0  000 0000 0000 0000 0000 1001
    	float* pFloat = (float*)&n;
    	printf("n的值为:%d\n", n);
    	printf("*pFloat的值为:%f\n", *pFloat);//注: E为全0,符合全0的情况所以V=(-1)^0*2^(1-127)*1.001 一个几乎接近0的数
    	*pFloat = 9.0;//注:9.0 -> 1001.0 ->(-1)^0*1.001*2^3 -> s=0, M=1.001,E=3+127=130
    	printf("num的值为:%d\n", n);//写为二进制为:0 10000010 001 0000 0000 0000 0000 0000->1091567616
    	printf("*pFloat的值为:%f\n", *pFloat);
    	return 0;
    }
    

    觉得写的不错的小伙伴记得三连啊!!!

    展开全文
  • C语言浮点数整数转换的分析

    万次阅读 2011-04-21 21:10:00
    这里以C语言浮点数为例,在IEEE浮点标准下,整数转换为浮点数的过程做一些直观的分析和具体的实现,IEEE浮点数的标准细节详见(http://en.wikipedia.org/wiki/IEEE_754-2008)。 在C语言中,使用float和double...

     

            这里以C语言的浮点数为例,在IEEE浮点标准下,整数转换为浮点数的过程做一些直观的分析和具体的实现,IEEE浮点数的标准细节详见(http://en.wikipedia.org/wiki/IEEE_754-2008)。

     

            在C语言中,使用float和double类型数据分别对应单精度和双精度的浮点格式。以float为例,由于float是32位,int在32位机器上也是32位。因此,float必然不能对所有的int进行准确的表示。实际上,在数轴上,浮点数所能表示的数呈非均匀的分布。举例如下图。


     

                                             .     . -3  .   .  .  .-2  . . .  -1..........0.........1.. . .   . 2 .  .     .      3.       .

     

     

           图中的点代表float可表示的数,可以看出,在所能表示的数中,接近0的比较密集,远离0的则步长逐渐增大。具体的步长可以根据浮点数标准算出。

          以float为例,符号位1位,阶码8位,位数23位。由IEEE浮点的标准可知,非规格化数表示那些非常接近0.0的数。这时候,阶码域全为0.因此,非规格化数的步长为

                                                             2-23×2-127 ≈ 1.4×10-45

     

          而非规格化数的范围则约等于   -1.2×10-38 到1.2×10-38  在这个范围内,float能表示的数呈均匀分布。

           而int则处在规格化数的范围内。对于规格化数,步长不均匀。步长可表示为

     

                                                                             2-23×2E

            其中,E的取值范围是-126~+127。显然,随着E增大,步长增大。因此,对于越远离0的区域,步长越大。当E =  30时,步长为128。如下程序是一个验证。

                                      

     

     

             其中,浮点数表示230次方,刚阶码值E=30,程序中a数组记录x每次加一的结果,从输出中可以看出,因为步长为128,在0-64次相加中,并没有改变a[i]的值,而在后64次相加中,a[i]则保持为230次方+128

     

                                                                       

            因此,除了不均匀的步长以外,还需要考虑的是舍入的问题。由上面的测试中可知,C语言的舍入方法中,若整数处于步长的前半,则向下舍入,否则向上舍入。而对于刚好处于中间的数,例如上图中a[64],这种与前后的可取的数距离相等,则采用向偶数舍入的原则。即取表示成float形式后,最后一位为偶数(0)的数。

            分析到此,开始实现,说白的就是实现一个 float f = float(integer)的功能。函数原型如下:

                                                                           unsigned  float_itof(int i)  

          把整数i转换为float的表示形式,然后返回对应的4个字节。函数中不能使用float类型及其运算。

          代码如下:

                           

            对输入i进行 INT_MIN 到 INT_MAX的范围测试,与float(i)的结果逐字节比较。代码正确。

     

    展开全文
  • 看一小段C语言程序:int main(){float x = 1.3;x = x - (int)x;int i = (int)(x*);return ;}在你心目中, 变量 I 是怎样的结果?如果你理所当然地认为是3的话, 那么你就错了~~~实际结果应该是2. 为什么?简而言之, x在...

    看一小段C语言程序:

    int main()

    {

    float x = 1.3;

    x = x - (int)x;

    int i = (int)(x*);

    return ;

    }

    在你心目中, 变量 I 是怎样的结果?

    如果你理所当然地认为是3的话, 那么你就错了~~~

    实际结果应该是2.   为什么?

    简而言之, x在内存的值并不是精确的1.3, 实际上可能是1.29999999......

    因为在计算机组成原因中有说过, 浮点数无法被准确地表示出来, 只能是一个非常精确的值..

    就算现在你已经知道这个"坑"了, 但还是不小心会犯, 所以务必要牢记~~~

    处理办法:

    1. 使用精度更高的double.

    2. 取整之前四舍五入(加上一个非常小的0.00000.......005, 但要注意浮点数的精度范围), 就像下面这样.

    int main()

    {

    float x = 1.3;

    x = x - (int)x;

    int i = (int)(x*+0.00005);

    return ;

    }

    同时也要值得注意的是, 这个四舍五入的操作只能用于取整的时候, 你不能加在原浮点值上面改变了原来的浮点数值.

    女孩不哭 @ cnblogs.com/memset @ 2014-05-02

    js浮点数运算的坑,多少同学有碰到过?

    javascript中的数字都是双精度的浮点数. JavaScript中的整数并不是一个独立的数据类型,而是浮点数的一个子集. 浮点数的坑我们看下面的例子 在浏览器的console 控制台上我们分别进 ...

    浮点数运算的精度问题:以js语言为例

    在 JavaScript 中整数和浮点数都属于 Number 数据类型,所有数字都是以 64 位浮点数形式储存,即便整数也是如此. 所以我们在打印 1.00 这样的浮点数的结果是 1 而非 1.00  ...

    深入理解计算机系统(2&period;8)---浮点数的舍入,Java中的舍入例子以及浮点数运算(重要)

    前言 上一章我们简单介绍了IEEE浮点标准,本次我们主要讲解一下浮点运算舍入的问题,以及简单的介绍浮点数的运算. 之前我们已经提到过,有很多小数是二进制浮点数无法准确表示的,因此就难免会遇到舍入的问题 ...

    Python:Base1(数据类型,print语句,变量,定义字符串,raw字符串与多行字符串,Unicode字符串,整数和浮点数运算,布尔类型运算)

    1.Python中数据类型: 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据 ...

    Number浮点数运算详解

    文章来自我的 github 博客,包括技术输出和学习笔记,欢迎star. 一道题 0.1 + 0.2 = ? 在浏览器中测试下计算结果,得到的结果是 0.30000000000000004,并不是理想 ...

    js&comma;java&comma;浮点数运算错误及应对方法

    js,java浮点数运算错误及应对方法 一,浮点数为什么会有运算错误 IEEE 754 标准规定了计算机程序设计环境中的二进制和十进制的浮点数自述的交换.算术格式以及方法. 现有存储介质都是2进制.2 ...

    &lbrack;POJ&rsqb; &num;1004&num; Financial Management &colon; 浮点数运算

    一. 题目 Financial Management Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 173910   Acc ...

    C语言位运算

    C语言位运算详解    位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,shor ...

    JS浮点数运算Bug

    JS浮点数运算Bug的解决办法(转) 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.0849999 ...

    随机推荐

    C&num;终于支持可选参数了&excl;

    今天偶然看了一下C#4.0的新特性, 第一个新特性就令我兴奋不已, 曾经一度令我使用C#很不习惯的"死参数"问题终于搞定了.实在太爽了! 过去用C++, VB.NET的时候都很爽, ...

    Apache 打开网页的时候等待时间过长的解决方案

    服务器搭建后经常在打开页面的时候,等待很长时间,有时候,都超过一分钟了,然后才能打开,但是打开后,速度又很快,休息一会再点击,又会很慢了,遇到了这种问题很头疼,由于不是专业做服务器配置的,所以刚开始没 ...

    Xamarin&period;Android提示aapt退出,代码为255

    Xamarin.Android提示aapt退出,代码为255 错误信息:”aapt.exe”已退出,代码为255.出现这种问题,通常是由于该项目所使用Android SDK不完整.通过SDK Mana ...

    php无缝连接滚动

    最近用到了,仿照别人的写了一个 sbdesc.h" //usb标准设备描述符 const U8 USB_DeviceDescriptor[] = { U ...

    hibernate 常用主键生成策略与配置

    ...

    英语口语练习系列-C17-Love story

    词汇学习 break [breɪk] v. 打破 broke (过去式) The glass broke. 玻璃杯碎了. My watch broke. 我的表坏了. break the law 违法 ...

    展开全文
  • C语言浮点数

    万次阅读 多人点赞 2019-08-03 20:23:07
    浮点数的概念 浮点数也称小数或实数。... C语言中采用float和double关键字来定义小数,float称为单精度浮点型,double称为双精度浮点型,long double更长的双精度浮点型。 在任何区间内(如1.0 到 2...

     

    浮点数的概念

           浮点数也称小数或实数。例如,0.0、75.0、4.023、0.27、-937.198 都是合法的小数。这是常见的小数的表现形式,称为十进制形式。

           C语言中采用float和double关键字来定义小数,float称为单精度浮点型,double称为双精度浮点型,long double更长的双精度浮点型。

           在任何区间内(如1.0 到 2.0 之间)都存在无穷多个实数,计算机的浮点数不能表示区间内所有的值。浮点数通常只是实际值的近似值,例如7.0可能被储存为浮点值6.99999。

    点用内存的情况

           我们先来测试一下float、double和long double三种浮点数据类型占用内存的字节数。

           示例(book71.c)

           

           运行结果

           

    浮点数的精度

           C标准规定,float类型必须至少能表示6位有效数字,且取值范围至少是10-37~10+37。

           double类型和 float类型的最小取值范围相同,但至少必须能表示10位有效数字。

           long double,以满足比double类型更高的精度要求。不过,C只保证long double类型至少与double类型的精度相同。

           看了上面这段文字,估计大家有点晕,在之前的整数章节中,long比int的占用的内存多,存放数据的值也就越大,并且有一个准确的范围,但是,为什么各种浮点数存放数据的值怎么就这么模糊呢?我先不解释原因,浮点数的存储方式比较复杂,暂时不讨论,先用几个程序来测试一下它们的特征。

    1、测试float类型

           示例(book73.c)

           

           运行结果

           

           从程序的运行我们可以看出float数的两个特征:

           1)float数据类型表达的是一个近似的数,不是准确的,小数点后的n位有误差,浮点数的位数越大,误差越大,到8位的时候,误差了1,基本上不能用了。

           2)用“==”可以比较两个整数或字符是否相等,但是,看起来相等的两个浮点数,就是不会相等。

    2、测试double类型

           示例(book74.c)

           

           运行结果

           

           从程序的运行我们可以看出double数的两个特征:

           1)double数据类型表达的也是一个近似的数,不是准确的,小数点后的n位有误差,浮点数的位数越大,误差越大,到17位的时候,误差了1,基本上不能用了。

           2)用“==”可以比较两个double数值是否相等。

    3、测试long double类型

           示例(book75.c)

           

           运行结果

           

           long double的测试结果与double相同。

    4、测试总结

          float只能表达6-7位的有效数字,不能用“==”判断两个数字是否相等。

          double能表达15-16位有效的数字,可以用“==”判断两个数字是否相等。

          long double和double的特征相同。

          在实际开发中,建议弃用float,只采用double就可以,long double暂时没有必要,但不知道以后的操作系统和编译器对long double是否有改进。

    浮点数的输出

          float采用%f输出,double采用%lf输出,测试结果证明,double也可以采用%f输出。

          long double采用%Lf输出,注意,L是大写。

          %lf缺省显示小数点后六位。

          如果要显示小数点后n位,用%.nlf,例如:

          double ff=7.5;

          %.2lf  显示 7.50

          浮点数采用%lf输出,完整的输出格式是%m.nlf,指定输出数据整数部分和小数部分共占m位,其中有n位是小数。如果数值长度小于m,则左端补空格,若数值长度大于m,则按实际位数输出。

    常用的库函数

          在接下来的内容中,我只介绍double,不再介绍float和long double两种数据类型相关的知识。

          以下是常用的浮点数函数,必须掌握。

          double atof(const char *nptr);       // 把字符串nptr转换为double

          double fabs(double x);               // 求双精度实数x的绝对值

          double pow(double x, double y);     // 求 x 的 y 次幂(次方)

          double round(double x);              // double四舍五入

          double ceil(double x);                 // double向上取整数

          double floor(double x);               // double向下取整数

          double fmod(double x,double y);     // 求x/y整除后的双精度余数

          double modf(double val,double *ip); // 把双精度val分解成整数部分和小数部分,整数部分存放在ip所指的变量中,返回小数部分。

          还有一些数据计算函数,如正弦、对数、指数等,实际开发中极少使用,大家要用的时候再查资料,我就不介绍了。

    整数转换为浮点数

          我们先来看一个示例(book77.c):

           

          运行结果

           

          需要特别注意的是dd=ii/jj这一行代码,dd的值0,不是0.75,有点意外,所以,如果对整数转换为浮点数没有把握,加(double)强制转换是个好办法。

    应用技巧

          浮点数有一些坑,例如两个浮点数不相等和精度的问题,在实际开发中,我们经常用整数代替浮点数,因为整数是精确的,效率也更高。

          例如人的身高一米七五,以米为单位,用浮点数表示是1.75米,如果以厘米为单位,用整数表示是175。

          long整数的取值是-9223372036854775808~9223372036854775807,有效数字是19位,而double的有效数字才15-16位,所以,整数可以表达的小数更大的数,更实用,麻烦也更少。

          货币:1.75元,如果采用0.01元为单位就是175,采用0.001元为单位就是1750,如果你说要更多小数怎么办?你这是钻牛角尖。

          给大家说一个道,高水平的程序员不容易掉坑里,注意,是不容易,不是一定不会,最好的方法是没有坑。

    科学计数法

          在实际开发中,我们很少使用科学计数法,但是它经常出现在计算机系统中,例如浮点数在内存中的存放方式就是科学计数法,所以我们还是有必要学习科学计数法。

          科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相乘的形式(1≤|a|<10,n为整数),这种记数法叫做科学记数法。当我们要书写或运算某个较大或较小且位数较多时,用科学记数法免去浪费很多空间和时间。

          例如:51400000000=5.14×1011。计算器或电脑表达10的幂是一般是用E或e,也就是51400000000=5.14E11或5.14e11。

          用科学记数法表示数时,不改变数的符号,只是改变数的书写形式而已,可以方便的表示日常生活中遇到的一些极大或极小的数 。如:光的速度大约是300,000,000米/秒;全世界人口数大约是:6,100,000,000。

          这样的数,书写和显示都很不方便,我们可以免去写这么多重复的0,将其表现为这样的形式:6,100,000,000=6.1×109,即6.1E9或6.1e9。

          或:0.00001=1×10-5,即绝对值小于1的数也可以用科学记数法表示为a乘10 的负n次方的形式。即1E-5或1e-5。

          科学计数法采用%e或%E输出,完整的输出格式是%m.ne或%m.nE,指定输出数据整数部分和小数部分共占m位,其中有n位是小数。如果数值长度小于m,则左端补空格,若数值长度大于m,则按实际位数输出。

          示例(book78.c):

           

          运行结果

           

     

    版权声明

    C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。

    来源:C语言技术网(www.freecplus.net

    作者:码农有道

    如果这篇文章对您有帮助,请点赞支持,或在您的博客中转发我的文章,谢谢!!!

    如果文章有错别字,或者内容有误,或其他的建议或意见,请您留言指正,非常感谢!!!

     

    展开全文
  • 一种对C语言浮点数进制转换的处理方法目前,C语言采用IEEE 754浮点数运算标准,致使在进行浮点数进制转换时,会产生精度错误,这些错误直接导致转换失败。故本文提出(本文共2页)阅读全文>>针对当前分支混淆方法仅...
  • C语言标准C89里规定了3种浮点数,float型、double型和long double型,常见的浮点型长度为float型占4个字节,double型占8个字节,long double型长度要大于等于double型,下面将以float型为例进行介绍,double型和long...
  • c语言浮点数整数转换 C中的数据类型 (Data Types in C) There are several different ways to store data in C, and they are all unique from each other. The types of data that information can be stored ...
  • C语言浮点数比较大小

    2021-06-11 13:38:43
    C语言浮点数比较大小,由于精度问题是不能直接比较的 如果只比较整数部分,可以将浮点数转化为整型,再去比较:或者定义一个精度来实现:
  • 在平时的编程中,很少会去关心浮点数的存储问题,但是一旦问题来了就不得不硬着头皮面对,为此将自己对它的理解记录下来,以便下次遇到的时候能够快速回忆起来。float和doubl都表示浮点数,其中float为占用32bit,...
  • c语言中获取整数浮点数的符号位1. 为什么要获得符号位很多时候,我们需要判断数值的正负,来做相应的逻辑处理。条件判断语句可以很好的完成这个需求。有时候会有下面的情况,if (x > 0) {x = x - 1;} else {x =...
  • C语言浮点数存储方式

    2019-02-22 20:54:51
    C语言浮点数存储方式 对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用 32bit,double数据占用 64bit.其实不论是float类型还是double类型,在计算机内存中的存储方式都是遵从IEEE...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,507
精华内容 17,402
关键字:

c语言浮点数取整数

c语言 订阅