首页
学习
活动
专区
工具
TVP
发布

C语言浮点数的存储

C语言中,有两种类型的浮点数:32位的float和64位的double,而在计算机中存储的是用二进制的科学计数法(即基数为2)表示的值 例如100=1100100B=1.1001B*26,123.456...float用8位表示指数,偏移就是127;double用的是11位,那偏移就是1023 看看123.456用float是如何存储的:因为是正数,符号位用0;指数是6,加上偏移127后,133=10000101B...将C语言中的定义转换为汇编验证一下 ? 再看一个纯小数的存储,例如0.00123456,这次倒着推导一下 ?...其中第一个0表示正值;挨着的8位01110101B=117,表示指数为(117-127)=-10;最后的23位表示尾数的小数部分,前面加上整数部分的1,再左移23位之后就是101000011101000011110110B...其中第一个0表示正值;指数位是10000000101B=1029,表示指数为(1029-1023)=6;最后是52位尾数,前面加上整数部分的1,再左移52位之后,11110110111010010111100011010100111111011111001110111B

1.4K11
您找到你想要的搜索结果了吗?
是的
没有找到

C语言浮点数float类型的秘密

1 前言 我们在学习 C 语言时,通常认为浮点数和小数是等价的,并没有严格区分它们的概念,这也并没有影响到我们的学习,原因就是浮点数和小数是绑定在一起的,只有小数才使用浮点格式来存储。...其实,整数和小数可以都使用定点格式来存储,也可以都使用浮点格式来存储,但实际情况却是,C 语言使用定点格式存储整数,使用浮点格式存储小数,这是在 “数值范围” 和 “数值精度” 两项重要指标之间追求平衡的结果...如果采用偏移量的方式: 8 位 2 进制数表示的有符号数范围有两个区间:0000 0000~0111 1111和1000 0000~1111 1111,分别为0~+127和-127~0。...+ 128 个正数总共 256 个数,看来使用移位存储既没有 +0 和 -0 的问题,又能充分使用新生成的8位二进制数最大限度的表示单精度浮点数的幂指数,是非常合理的。...更多案例可以go公众号:C语言入门到精通

3.9K2219

C语言 实现浮点数的整型强制转化

关于浮点数的由十进制到二进制的转换大家一定也清楚,整数部分除二取余,小数部分乘二取整。 最后的结果是:12.125(10) = 1100.001(2) 浮点数共计占内存4个字节,即32位。...这32位是按照这样的规则存储的: (1)一位符号位 整数为0 负数1。用0,1将符号数字化,因为计算机是不懂正负号,而0和1恰恰可以表示这两种状态。...(3)由二步骤可以知道12.125尾数为1.1100001,但是可以联想一下,任意一个单精度类型的数据转化成科学计数法的二进制数都是1.xxxxxxxxxx,因此实际上在存储中将第一位的略去表示,这样一来...下面实现这样的一个单精度浮点数到整型的强转函数: int float_to_int(float f) { int *p = (int*)&f; //由于指针访问内存是按照基类型进行的,首先进行强转访问浮点数...(关于这点,目前还在测试,一定会有一个满意的解释的) 写到这里,差不多结束了,其实双精度浮点数的强转时类似,只要能完全掌握双精度浮点数在内存中的存数形式。

2.3K20

c语言0和1表示什么_’0’是什么意思c语言

C语言中常见 ~Number ,怎么计算? 计算一个数字的 ~number 比如说现在有 A=60 所谓~,就是我们要找到那个负数的补码值等于这个数字的取反。...即 1100 0011 -1 == 1100 0010 (第一步逆向操作) 1100 0010 =>取反=> 00111101 => 十进制的 61 最后结果 A == 60 , ~A = -61 C...语言中 ~60 == -61 计算~0 0 的补码 0000 0000 取反 1111 1111 逆操作 -1 => 1111 1110 取反 => 0000 0001 即 1 又因此处 是取反 负数...即 ~0 == -1 任意数 B=x ~B= x二进制 =>取反 => 减1 => 再取反 => 转化为 10 进制的负数 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

2.5K30

C语言进阶】内存中浮点数的存储规则

二、 浮点数在内存中的存储是怎样的 2.1 引例 浮点数的存储规则: 举例来说: 有效数字M和指数E的特别规定 验证浮点数是不是这样存储的 2.2 指数E的三种情况 (1) E不全为0或不全为1 (2)...E全为0 (3)E全为1 三 、开头例题讲解 总结 今天我们讲解了 前言 大家在写C语言中都用过浮点数float,和double。...C语言常用的浮点数有: float doule long doule 其中 long double 是在C语言 C99& 的新标准中增加的。...所以 S=0 E=126 M=0 参考前面浮点数的储存模型可知 则其二进制表示形式为: 0 01111110 00000000000000000000000 (2)E全为0 这时,浮点数的指数...S=0 E=0 M= 0…1010 这里就是指数E为0的时候 套用浮点数计算公式 V = (-1)^S * M * 2^E 我们拿出的是一个无限接近0的一个小数 而%f只打印6个零就不打印了所以我们打印的是

15510

小朋友学C语言(3):整数、浮点数、字符

C语言的数据类型有整型、浮点型(就是小数)、字符、字符串、数组、结构体等。刚开始学的时候,不要一下子学太多。先学最基本的整型、浮点型和字符。 对于学习程序来说,最重要的是动手操作。...= 'A'; printf("The char is %c\n", c); return 0; } 运行结果 a = 1 b = 2.200000 The char is A 程序分析:...C语言中,第一次出现的变量必然定义,否则编译器会不认得这个变量。 (2) printf("a = %d\n", a); 上节课已经说过,printf的作用是在控制台打印(输出)内容。...(4) printf("b = %f\n", b); 这里%f是浮点数的格式化符号,需要用一个浮点数来替换,逗号后面的b的值,就是用来替换%f的。...所以输出结果是 b = 2.200000 这里小数点后面显示了六位小数,这是因为浮点数在计算机中默认就是6位数。

1.2K60

c语言浮点数输出格式的控制,c语言输出格式控制「建议收藏」

1.转换说明符 %a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整数 %f 浮点数(包括float和doulbe) %e(%E) 浮点数指数输出[e-(E...-)记数法] %g(%G) 浮点数不显无意义的零”0″ %i 有符号十进制整数(与%d相同) %u 无符号十进制整数 %o 八进制整数 e.g. 0123 %x(%X) 十六进制整数0f(0F) e.g.... 0x1234 %p 指针 %s 字符串 %% “%” 2.标志 左对齐:”-” e.g. “%-20s” 右对齐:”+” e.g. “%+20s” 空格:若符号为正,则显示空格,负则显示”-” e.g.... “% 6.2f” #:对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x; 对e,g,f 类当结果有小数时才给出小数点。...③0:有0表示指定空位填0,如省略表示指定空位填。 ④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。

1.5K40

C语言整型和浮点数在内存中的存储

但是在C语言中除了8 bit的char之外,还有16 bit的short 型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32 位的处理器,由于寄存器宽度大于一个字节...) 754, 任意一个二进制浮点数V可以表示成下面的形式: (-1)^S * M * 2^E (-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。...注:指数E从内存中取出还可以再分成三种情况 E不全为0或不全为1 该种类型的浮点数表示规则是,即指数E的计算值减去127(或1023),得到真实值,再将 有效数字M前加上第一位的1。...E全为0 浮点数的指数E等于1-127(或者1-1023)即为真实值, 有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于 0的很小的数字。...案例说明 浮点数9.0在VS2019(32位)中的存储 代码: int main() { double i = 9.0; return 0; } 9.0的表示:(-1)^0 * 1.001

14720

C语言中的函数指针(*(void(*)())0)();

‘’ 我刚开始学习C语言的时候是写简单的数学运算在黑框框里面跑,然后用C语言写51单片机的代码,再到后来玩stm32,学应用层编程,学内核编程等,框架结构逐渐变的复杂,也越来越觉得对C语言的理解还不够到位...个人总结一下C语言中有关函数的知识,如有问题请留言指明*v* (*(void(*)())0)(); 其实这个语句只有在微处理器最底层才有可能被调用,因为应用层几乎没有直接对一个地址进行操作的。...第一眼看上去都会脑袋一懵吧,其实我也例外。但是你仔细分析一下就豁然开朗了。要想弄清楚这个语句,你得清楚三个问题。 什么是函数指针变量? 怎么通过函数指针变量调用函数? 函数指针变量是怎么定义的?...看到这里,再回头看看上面的(*(void(*)())0)();语句,你会发现(void(*)())0是将0强转成无返回值无入参的函数指针地址,外面一层就是取地址执行函数。...C语言的函数指针非常重要,大工程里面经常出现各种回调函数,学习的过程中,基本功还是要扎实,不然真的会经常踏入陷阱。 ps:本文参考资料《C陷阱与缺陷》,感兴趣的同学可以读一读

1.7K20

c语言0->1入门——HelloWorld

c语言,作者打算用题海+c语言的概念来完成本栏目, 适用人群:面向广大的编程爱好者和大学生来进行创作 学完本栏后你能达到的水平:计算机二级水平左右,入门c语言学习 题目:主要来源于网络和c语言的入门算法题目...; return 0; } 这个程序看似只有6行,但是蕴含的东西不少,这个我们会在后面的栏目单独讲,作为初学者的彦祖们,此刻按照栏目中的程序照着抄一遍就好,每篇博客我们都会学习一点的新语法!...; return 0; } 这样就可以在一个项目中运行俩个c程序了!...c语言又被称为最简单的高级语言,它可以直接对系统进行操作。 c++语言是面向对象的程序设计语言。上面说到c语言对大规模复杂的程序解决的不足就可以使用c++语言来处理。...可以说c++是由c语言发展而来的,甚至与c语言兼容。理论上说c++能做到的事情c语言都能做到,但c++语言为大家提供了更简单的方法去实现。

62220

C语言中‘0’和EOF的区别

前提知识 ‘\0’和EOF都是在C语言的字符串中出现的,想要了解这两位的区分我们首先就得了解C语言中字符串的定义。...字符串的定义 在C语言中没有严格的标准定义字符串,即在C语言中没有字符串这一变量类型。 C语言中字符串的存储通常是以字符数组的形式来进行的。 以字符串“hello world !”...} 代码结果: EOF在C语言中的作用 EOF(End Of File),通常用于指示文件结束或者输入流的结束。...#include int main() { int a, b, c; int rec = 0; rec = scanf("%d %d %d", &a, &b, &c); printf...总结: 虽然’\0’和EOF差别很大,但是很多人在刚接触C语言时经常会对这两个末尾数据搞混。 一个是字符串的结束标志’\0’ ,表示的是空字符, 一个是文件输入的结束标志EOF,其代表着常量-1。

400

深入解析C语言数组和指针(0)

有人说它是C语言的灵魂,只有深入理解指针才能说理解了C语言。暂且撇开这些观点不谈。这章是我在阅读《C和指针》这本书的读书笔记。...下面的例子显示了内存中的5个字的内容。 ?   但是记住他们的地址太麻烦了,所以高级语言提供通过名字而不是地址来访问内存位置的功能,下面用名字代替地址: ?   这些名字我们称之为变量。...值和类型 假设我们对上面的第三个位置声明如下: float c=3.14;   我们可以看到这和c中存储的值并不一样,我们声明的是一个浮点数,二内存中显示c是一个整数。...实际上声明并没有错,原因是每个变量中包含一连串的1或0。它可以被解释为浮点数也可以被解释为整数,这取决于它们被使用的方式。...对指针和数组的正确区分有助于理解c语言的结构语法。

1.2K30

C语言简单说】三:浮点数变量和字符变量(4)

(其实我已经忘记我有没有说)0o。(-. - ) 睡觉 这节我们就来说说,我们之前有整数变量了对吧?那个int就是整数类型的对吧?...好了,我们现在就来说说浮点数变量和字符变量,意思就是存字符的,和浮点数的;在此可能有些白不懂啥是浮点数,没关系,我以前自学的时候也是,搞得我一塌糊涂。...在这里我要提醒以下,单引号在C语言里面表示字符的意思,就是要说明这个是个字符的时候就需要单引号;在这里我是不是要把这个字符C给a变量,把字符C丢给a变量装着?...float是浮点数,int 是整数。 我们搞懂上一句之后现在我们来搞懂下一句: printf("a 的值是%c;",a); 我们这句代码不懂的也就是%c了吧?...之前说过%d是整数的,float是浮点数的,那么在这里的a变量是字符,那么%c就是字符的了。 :-# 茫茫然的表情 持续更新。。。

38410

C语言】关于 整数 和 浮点数 在内存中存储方式

IEEE 754规定: 对于32位 的浮点数,最⾼的1位存储符号位S,接着的 8位 存储指数E,剩下的 23位 存储有效数字M。...对于== 64位== 的浮点数,最⾼的1位存储符号位S,接着的 11位 存储指数E,剩下的 52位 存储有效数字M。...以 32位 浮点数为例,留给 M 只有 23位,将第⼀位的 1 舍去以后,等于可以保存 24位 有效数字。...3 特殊情况 M 都为 1也 都为 0 E全为0 这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,有效数字M不再加上第⼀位的 1,⽽是还原为 0.xxxxx x的⼩数。...这样做是为了表⽰±0,以及接近于0的很⼩的数字。 E全为1 这时,如果有效数字M全为0,表⽰±⽆穷⼤(正负取决于符号位s);

7710
领券