请问各位大神,C中的float128类型的取值范围跳大神是什么意思?谢谢~!

C语言类型强制转换_百度百科
关闭特色百科用户权威合作手机百科
收藏 查看&C语言类型强制转换
是通过类型转换运算来实现的。其一般形式为: (类型说明符) () 其功能是把表达式的运算结果成类型说明符所表示的类型。外文名C语言类型强制转换通&&&&过类型转换运算来实现的
是通过类型转换运算来实现的。其一般形式为:(类型说明符)()其功能是把表达式的运算结果成类型说明符所表示的类型。自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型到另一类的转换。例如: (float) a 把a转换为浮点型,(int)(x+y) 把x+y的结果转换为。在使用时应注意以下问题:1.类型说明符和都必须加括号(单个可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。
2.无论是或是自动转换,都只是为了本次运算的需要而对的数据长度进行的临时性转换,而不改变数据说明时对该定义的类型。
float f=5.75;
printf("f=%d,f=%f\n",(int)f,f);
f=5,f=5.750000
将float f成int f float f=5.75;printf("(int)f=%d,f=%f\n",(int)f,f); 本例表明,f虽强制转为int型,但只在运算中起作用, 是临时的,而f本身的类型并不改变。因此,(int)f的值为 5(删去了小数)而f的值仍为5.75。
比如我们可以(int)'A',这样转换后的结果为A的ASCII码数值,因为那块内存本来就存的那个数,只是换个形式使用而已。 知道上面的原则,我们可以对任何进行转换,但是转换的结果可能不是你想像的结果,举例(int)'9'的结果为多少?不是9而是0x39。来个高深点的printf("%d",‘12’);的输出是什么?正确答案是12594,因为printf("%d",'12'),打印的是存储12的上的内容,即ASCII码值2存储在低位,1储在高位地址,0x32就是2的ASCII码,0x31就是1的ASCII码,所以是0x3132,转换成10进制就是12594!
● 型的值实质上是一个8位的整数值,因此取值范围一般是-128~127,char型变量也可以加unsigned,则unsigned char 型变量的取值范围是0~255(有些机器把char型当做unsighed char型对待, 取值范围总是0~255)。
● 如果一个两边的运算数类型不同,先要将其转换为相同的类型,即较低类型转换为较高类型,然后再参加运算,转换规则如下图所示。
double ←── float 高
int ←── char,short 低
● 图中横向箭头表示必须的转换,如两个float型数参加运算,虽然它们类型相同,但仍要先转成double型再进行运算,结果亦为double型。 纵向箭头表示当运算符两边的运算数为不同类型时的转换,如一个long 型数据与一个int型数据一起运算,需要先将int型数据转换为long型, 然后两者再进行运算,结果为long型。所有这些转换都是由系统自动进行的, 使用时你只需从中了解结果的类型即可。这些转换可以说是自动的,当然,C语言也提供了以显式的形式类型的机制。
● 当较低类型的数据转换为较高类型时,一般只是形式上有所改变, 而不影响数据的实质内容, 而较高类型的数据转换为较低类型时则可能有些数据丢失。
赋值中的类型转换
当两边的运算对象类型不同时,将要发生类型转换, 转换的规则是:把赋值运算符右侧的类型转换为左侧的类型。具体的转换如下:
● 将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分, 只保留整数部分。将值赋给变量,数值不变,只将形式改为浮点形式, 即小数点后带若干个0。注意:赋值时的类型转换实际上是强制的。
● 由于C语言中的浮点值总是用双精度表示的,所以float 型数据只是在尾部加0延长为double型数据参加运算,然后直接赋值。double型数据转换为float型时,通过截尾数来实现,截断前要进行四舍五入操作。
(3) char型与int型
● int型数值赋给char型时,只保留其最低8位,高位部分舍弃。
● char型数值赋给int型时, 一些不管其值大小都作正数处理,而另一些编译程序在转换时,若char型数据值大于127,就作为负数处理。对于使用者来讲,如果原来char型数据取正值,转换后仍为正值;如果原来char型值可正可负,则转换后也仍然保持原值, 只是数据的内部表示形式有所不同。
(4) int型与long型
● long型数据赋给int型时,将低16位值送给int型变量,而将高16 位截断舍弃。(这里假定int型占两个字节)。 将int型数据送给long型时,其外部值保持不变,而内部形式有所改变。
● 将一个unsigned型数据赋给一个占据同样长度的时(如:unsigned→int、unsigned long→long,unsigned short→short) ,原值照赋,内部的存储方式不变,但外部值却可能改变。
● 将一个非unsigned赋给长度相同的unsigned型时, 内部存储形式不变,但外部表示时总是无符号的。
/*例:举例 */
unsigned a,b;
printf("(unsigned)%u→(int)%d\n",a,j);printf("(int)%d→(unsigned)%u\n",i,b);
运行结果为:(unsigned)65535→(int)-1(int)-1→(unsigned)65535
● 计算机中数据用补码表示,int型量最高位是符号位,为1时表示负值,为0时表示正值。如果一个无符号数的值小于32768则最高位为0,赋给 int型后、得到正值。如果无符号数大于等于32768,则最高位为1, 赋给后就得到一个负整数值。反之,当一个负整数赋给unsigned 型时,得到的无符号值是一个大于32768的值。
● C语言这种赋值时的类型转换形式可能会使人感到不精密和不严格,因为不管的值怎样,系统都自动将其转为左部的类型。
● 而转变后数据可能有所不同,在不加注意时就可能带来错误。 这确实是个缺点,也遭到许多人们批评。但不应忘记的是:c语言最初是为了替代汇编语言而设计的,所以类型变换比较随意。当然, 用是一个好习惯,这样,至少从程序上可以看出想干什么。
新手上路我有疑问投诉建议参考资料 查看C语言各种数据类型在系统中占的字节和取值范围_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
1页免费61页免费42页免费62页免费3页免费39页免费31页免费18页免费6页免费46页2下载券
喜欢此文档的还喜欢134页2下载券28页免费28页免费6页免费
C语言各种数据类型在系统中占的字节和取值范围|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢您所在的位置: &
浅析C++数据类型取值范围
浅析C++数据类型取值范围
C++数据类型定义编译器在内存中存放信息的方式。在有些编程语言中,可以向变量赋予任何数值类型,翻译器能考虑根据数字长度和类型分配空间。
C++数据类型是用来存储值的所在处;它们有名字和数据类型,变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中,变量名允许的最大长度随编译器的不同而不同。
而在C++数据类型,则必须先声明变量类型再使用变量:int x1 = 1;int x = 1000;float y = 3.14;long z = 457000;这样,编译器就可以进行类型检查,确保程序运行时一切顺利。数据类型使用不当会导致编译错误或警告,以便分析和纠正之后再运行。
有些数据类型有带符号和无符号两种。带符号(signed)数据类型可以包含正数和负数,而无符号(unsigned)数据类型只能包含正数。表1.1列出了C++中的数据类型、所要内存量和可能的取值范围。
数据类型 字节 数取值范围:char&1&-128到126& &&unsigned&char&1&0到255& &&short&2&-32,768到32,767& &&unsigned&short&2&0到65,535& &&long&4&-2,147,483,648到2,147,483,648& &&unsigned&long&4&0到4,294,967,295& &&int&4&同long& &&unsigned&int&4&同unsigned&long& &&float&4&1.2E-38到3.4E381& &&double&8&2.2E-308到1.8E3082& &&bool&1&true或false&&
从上表可以看出,int与long相同。那么,为什么C++还要区分这两种数据类型呢?实际上这是个遗留问题。在16位编程环境中,int要求2个字节而long要求4个字节。而在32位编程环境中,这两种数据都用4个字节存放。
C++数据类型只生成32位程序,所以int与long相同。说明 在C++ Builder和BorLand C++ 5.0中,Bool是个真正的数据类型。有些C++编译器有Bool关键字,则Bool不是个真正的数据类型。
有时Bool只是个typedef,使Bool等价于int。typedef实际上建立别名,使编译器在一个符号与另一符号间划上等号。typedef的语法如下:typedef int B这就告诉编译器:Bool是int的别名。说明 只有double和float数据类型使用浮点数(带小数点的数)。
其它数据类型只涉及整数值。尽管integer数据类型也可以指定带小数点的数值,但小数部分会舍弃,只将整数部分赋予整型变量,例如:int x=3.75;得到的x取值为3。注意,这个整数值并不是四舍五入,而是放弃小数部分。
顺便说一句,大多数Windows程序很少用到浮点数。C++数据类型可以在必要时进行不同数据类型间的换算。例如:long num1 = 200;long num2 = 200;result = num1 * num2;这里我想将两个长整型的积赋予一个短整型。尽管这个公式混用了两种数据类型,但C++能够进行换算。
计算结果会怎样呢?结果会让你大吃一惊,是25536,这是绕接(wrop)的结果。从表1.1可以看出,短整型的最大取值为32767,在最大值之上加1会怎么样呢?得到的是32768。这实际上与汽车里程计从99999回到00000的道理一样。为了说明这点,请输入并运行下列清单1.3中包含的程序。 【责任编辑: TEL:(010)】
关于的更多文章
Angular.js 是一个MV*(Model-View-Whatever,不管是MVC或者MVVM
本次的专刊为大家提供了Oracle最新推出的Java SE 8详细的开发教程,从解读到探究Java 8最新
总结一下Java I/O文件读写基本类相关知识和概念。对于
今天是被国际上众多科技公司和软件企业承认的业内人士
互联网一大真理便是,有痛点的地方就有机会。现在最想
本书深入浅出地阐述了计算机网络技术的基本原理,介绍了当前常用的先进网络技术以及网络的实际应用知识。全书主要内容包括计算机
51CTO旗下网站c语言中双精度浮点数(即double类型数据)的取值范围_百度知道
c语言中双精度浮点数(即double类型数据)的取值范围
c语言中双精度浮点数(即double类型数据)的取值范围,是怎么计算出来的?
提问者采纳
就知道了,double类型占8个字节:尾数部分 float: 0代表正,更详细的:符号位(Sign) ,1代表为负 指数位(Exponent)。---浮点数分为单精度(float)和双精度(double),float类型在计算机内部存储占4字节再推荐一个文章给你看,并且采用移位存储 尾数部分(Mantissa)。无论是单精度还是双精度在存储中都分为三个部分,根据IEEE754标准。认真读完:用于存储科学计数法中的指数数据,比较长。要有耐心啊
提问者评价
其他类似问题
按默认排序
其他1条回答
,另有规定全0时代表0所以.3.:e=-)52位小数位 f共计64位.3 到 -4:一位符号位 s11位指数位 E(移码表示:负值取值范围-1.4 到 1,8个字节所表示的规格数为,范围为,正值取值范围为 4,1:1.4.f * 2^e
.=2 )能表示的最小数约等于 -2*2^4能表示的最大负数约等于 -2*2^-23能表示的最大数约等于 2*2^4能表示的最小正数约等于 2*2^-23当然.1111111.f 约等于2
(1双精度浮点数在计算机中的存储方式为
浮点数的相关知识
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 水煮大神结局是什么 的文章

 

随机推荐