首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C语言】强制类型转换的原理

,所以存储形式是不会变得,而我们现在却改变了读取方式,我们用双精度的形式来读取这个二进制代码,分别读取他的符号位,指数位,有效位,所以我们打印出来的数,其实就是用读取浮点型的方法来读出整型5的二进制代码...,其实就是将a的二进制代码按照浮点型的形式拿出来,然后进行打印,如果你想要知道这个打印的结果的话,你必须写出来他的二进制代码,然后将其按照浮点型中表示方法的对应比特位的个数拿出来,最后进行结果读取 1.3...a原来在内存里面表达为14.99的浮点型二进制代码形式,将其改变为表达15的整型二进制代码形式 2.2 标准形式 int main() { int a = 1234567890; float f =...(1234567890)将它的二进制代码存到栈区里面,然后我们要将其存到浮点型变量f里面,所以这时就又按照浮点型的格式存到内存里面了(表达的为1234567890.000000),但此时它在内存中的存储方式已经改变了...,他变成能表达为1234567890.000000这样的浮点型数字的二进制代码了,而不是原来表达为1234567890 这样的整型数字的二进制代码了,所以我们打印结果就变成了1234567890.000000

1.3K10

数据在内存中的存储(2)

二、两类浮点型数据(float、double)在内存中的存储方式 2.1两类浮点型数据的存储模型 根据IEEE754标准规定,浮点型数据的存储和读取按照公式: Value为浮点型数据的二进制值 S表示浮点型数据的正负...但是,IEEE754标准中规定E为一个无符号整型,而现实中科学计数法指数位E可能为负数,因此,这里引入了中间值的概念。...图4.1 展示了整型数据 int n = 9 在内存中的存储形式,若以浮点型数据的视角去读数,则,,E的二进制位全部为0,由3.5.2中提到的知识,E的二进制位全为0时表示为一个无穷小的数据,且以%f...这是因为 n1 = 9.0 以浮点型数据的存储方式存入到了内存中(存储方式如图4.2所示),但在读取并打印这个数据的时候,却是对一个整型指针进行解应用,将9.0以整型数据的视角进行读取和打印。...故打印结果为: 四、总结 本文详细介绍了单精度浮点型数据和双精度浮点型数据在内存中存储的方法,给出了浮点型数据的存储模型和读取模型,并以案例的形式进行了介绍。浮点型数据可表示为: 。

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

    【C语言】数据在内存中的存储

    ---- 前言 不同的数据在内存中的存储形式是不同的,而当我们掌握数据在内存中的存储形式之后,会帮助我们更加了解计算机深层工作原理 废话不多说,我们接下来直接进入正题 一:数据类型详细介绍 ##1....1,当发生截断后存储在变量abc中的内存形式均为11111111,但打印的是int型的十进制数字,所以要进行整型提升。...11111111 11110110 读取:将i+j的结果强制输出为有符号数,则我们想要知道结果,就得先把它转换为原码,原码就是我们能够看到的输出结果,现在我们进行原码的读取(写的好累啊),i+j的反码为...但当我们打印浮点数时,我们在存储和读取是于int型是不同的,符号位是0,指数位也是0,因为指数位是全0,那么属于读取的第二种情形,将浮点数表示为0.92^-126,这个数字表示非常小的数字,机器就会输出...3.3总结整数和浮点数在存储时的一些区别 在小数部分的存储,我们直接将浮点数二进制表示形式下的小数部分存到23比特位的部分即可(或者52比特位),在读取时我们也直接将其整体拿出来加上个1就是二进制形式下的浮点数表达了

    1K20

    变量以及数据类型_数据类型定义

    整型的使用细节 浮点类型 基本介绍 浮点类型 说明一下: 浮点型使用细节 字符类型 基本介绍 字符类型使用细节 字符类型本质探讨 布尔类型 基本介绍 变量的相关概念 为什么需要变量 不论是使用哪种高级程序语言编写程序...,把变量b 值输出 %d 表示输出的形式为整数 getchar(); //将控制台停留,等待输入 } 变量的介绍 概念 变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间...浮点型使用细节 浮点型常量默认为double型 , 声明float型常量时, 须后加‘f’或‘F’。...a’——>读取(显示) 字符和码值的对应关系是通过字符编码表决定的(是规定好) 布尔类型 基本介绍 C语言标准(C89)没有定义布尔类型,所以C语言判断真假时以0为假,非0为真 [案例] 但这种做法不直观...C语言标准(C99)提供了_Bool 型, _Bool仍是整数类型,但与一般整型不同的是,_Bool变量只能赋值为0或1,非0的值都会被存储为1, C99还提供了一个头文件 定义了

    1K10

    初识C语言·2

    整型 整型,整数类型的意思,在C语言中,将整型进行了一个细分,分为短整型,整型,长整型,更长的整型,注意,更长的整型是在C99中引入的。...浮点型 不少人看到这个名字觉得好高深,其实就是小数的意思啦,当然,浮点型分为两种,一种是单精度浮点型,一种是双精度浮点型,一听就知道双精度浮点型的精确度要高点。...C语言中规定,float是单精度浮点型,double是双精度浮点型。 浮点型也是有long double的。...看来不是,而且细心的人会发现6的下面有三个点,当把鼠标移动过去就会有提醒说“整数除法运算应先去尾再转化为浮点型”,原因在于我们在进行除法运算时两个操作数都是整型,C语言中的整数除法是整除,也就是只会返回整数部分...看代码: 空格全部忽略,读取到-13,发现有个点,就不是整型,就跳过,由于遗留的是. ,对应是%f,所以会读取到.45e,%不属于浮点型的有效字符,所以会停在这里。

    8710

    【Java】Java的基本类型解读

    在Java中,基本类型分为四种主要类型:整型、浮点型、字符型和布尔型。下面将分别介绍这四种类型: 整型(int、short、byte、long): int: Java中最常用的整数类型。...short: 占用16位(2字节)内存,范围为 -32,768 到 32,767。通常在内存有限或需节省内存空间时使用。 byte: 占用8位(1字节)内存,范围为 -128 到 127。...注意事项: 在使用基本类型时,确实需要注意以下几点: 整型和浮点型的精度损失和溢出: 整型和浮点型数据在进行运算时,可能会出现精度损失或溢出的情况。...例如,对于浮点数进行大量的累加运算可能会导致精度损失,而超出整型范围的数值运算则可能导致溢出。为了避免这些问题,可以使用适当的数据类型,并在必要时进行类型转换或使用更高精度的数据类型。...整型和浮点型运算中的类型转换: 在进行整型和浮点型之间的运算时,需要注意数据类型的自动转换规则。

    9010

    C语言详解(数据存储)

    所以只将-1的补码的后8位存到a中,我们又用%d(打印有符号整型)打印字符型变量a,那%d就认为它打印的数是整型,a不是整型所以要发生整型提升,a是char(signed char)类型,整型提升高位补符号位...而我们将整数-1存入一个无符号字符型变量c中,截断只存入-1的补码的后8位,用%d打印需要整型提升,而c是无符号字符型,整型提升高位补0,补完后用%d打印时%d看它就是一个比较大的正数,原反补相同,00000000000000000000000011111111...但结果并不是这样,通过观察我们发现,只有当n是整数9时用%d打印的结果和当n是浮点数9.0时用%f打印的结果是我们预料中的,所以可以肯定的是整数和浮点数在内存中的存储是不一样的。...了解清楚了浮点数在内存中的存取后,我们再来分析一下前面的那个代码。 创建一个整型变量n赋值为9,用%d打印时就按常规打印出整数9。...是float *类型的指针,所以pfloat就认为它指向的数是一个浮点数,就会按浮点数存取的规则来读取,在pfloat眼中整数9的补码是这个样子: S=0,E为全0,那这个值就是一个极小的正数

    8510

    【C语言进阶】——深入剖析数据在内存中的存储

    浮点型在内存中的存储 1....-128存储在内存中的补码为1000 0000(截断),打印无符号整数时,整型提升,char为有符号数,高位补符号位,即11111111 11111111 11111111 10000000,由于是打印无符号的整型...接下来讲解以下浮点型是如何在内存中存储的。 4. 浮点型在内存中的存储 像float、double、long double…都属于浮点型,接下来将探究浮点型是如何在内存中存储的。...比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。...指数E从内存中取出还可以再分成三种情况: 1、E不是全0,也不是全1 读取时先将E-127(1023),然后在前面有效数字M前面加个1 就比如读取上面的0 10000001 011 0000 0000

    84830

    数据在内存中的存储

    我们知道,在内存中存储数据一般是以字节为单位的,而当超过一个字节大小的数据,存储的过程中就要遇到顺序问题,所以,内存中存储数据是有一定顺序的,按照不同的存储顺序,就分为大端字节序存储和小端字节序存储,具体概念如下...1;这里还是将-1转化位二进制 11111111 ——补码 将补码存储到c当中去,而c是无符号类型,它就会把符号位当成数值位来看待; 接下来以%d的形式输出,由于char只占一个字节,这里就会涉及到整型提升将...了解了整型数据在内存中的存储,接下来,来了解浮点型数据在内存中的存储: 浮点型数据的存储,根据国际标准IEEE(电器和电子工程协会)754,任意一个浮点数V都可以表示成一下形式: 这里-1的S次方表示符号位..."n的值为:%d\n",n); 这个应该都可以理解,n是整型数据,以%d形式输出,就是9; 然后来看 printf("*pFloat的值为:%f\n", *pFloat); 9 以整型的形式存储在内存中...0.000000 紧接着来看 *ploat = 9.0 以后,在以%d形式输出: 这里就要按照浮点型数据存储将9.0存储到内存中, 9 的二进制 1001.0 换成科学计数法就是 1.001 * 2^

    9510

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

    1E10 ------------- 这个也表示浮点型,E表示底数10,而E后面的数表示指数,所以E10就是10^10,而E前面的1是数量级,综上,1E10就是1*10^10。...); return 0; } 输出结果: 我们不难发现,当n以整型的方式存进去,然后分别以整型和浮点型的方式取出,发现以浮点型的方式打印结果有问题;对应的,当n以浮点型的方式存进去,再以整型的方式取出...由此,可以得出一个结论,浮点型在内存中的存储和整型在内存中的存储是不一样的。...小试牛刀 我们现在已经大致掌握了浮点型在内存如何存储和取出,让我们来解决一下引言的问题吧!...,而现在的M也是一个非常小的数字,当我们用%f打印时,只能保留6位有效数字,因此打印结果就是0.000000 再看第二段代码 我们首先是将9.0存储再一个浮点型中 9.0在浮点型中存储的二进制位表达形式是

    10210

    数据在内存中的储存

    先来回顾一些C语言中的内置类型 类型 说明 int 整型 short 短整型 long 长整型 long long 更长整型 float 单精度浮点型 double 双精度浮点型 注意:C语言中无String...什么大端小端: 大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址 中; 小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地...例如:一个 16bit 的 short 型 x ,在内存中的地址为 0x0010 , x 的值为 0x1122 ,那么 0x11 为 高字节, 0x22 为低字节。...我们已经知道整型在内存中存储的是补码,那么浮点型是否也是这样呢?...; } 输出结果 由结果可知,浮点型与整型储存方式不一样,所以浮点数的储存方式是什么呢?

    32620

    C语言入门指南(3)(格式化输入输出)(包含scanf的读取方式)

    如果后接的是浮点型数据,那么这个.p决定的是保留浮点型数据的小数点位,以一个代码为例。...接着读取+,一个整型数据+不应该在数字后,所以+不符合,scanf函数将读取的20放到第一个参数i中。而不符合的+被放回输入缓冲区。...将.38e5存入浮点型数据f中,-被放回输入缓冲区。接着读取的是%d,-符合整型的转换说明,被保留,8也符合转换说明,被保留。...我们以一个整型数据的100举例,我们要清楚一个数据是会按照二进制数存放在内存当中的,100在内存当中的存储形式为00000000 00000000 00000000 01100100.如果我们用%d的来读取它...而浮点型的读取是与整型截然不同的读取方法,如果用%f的形式来读取100只会得到0.000000(有兴趣可以去了解一下)。

    24010

    C语言进阶-数据在内存中的存储

    目录 前言 数据类型 C语言基本的内置类型 类型的意义 类型的基本归类 整形在内存中的存储 原码、反码、补码 意义 大小端 什么是大端小端  为什么有大端和小端 一道笔试题 练习 浮点型在内存中的存储...浮点型在内存中的存储解析 数据类型 ---- C语言基本的内置类型 char //字符数据类型 unsigned char //signed(有符号)/unsigned(无符号)...对于整形来说 数据存放内存中其实存放的是补码 而数据的读取是使用原码 意义 在计算机系统中,数值一律用补码来表示和存储 使用补码可以将符号位和数值域统一处理 同时加法和减法也可以统一处理(...大端:指数据的低位保存在内存的高地址中,而数据的高(权)位,保存在内存的低地址中 小端:指数据的低位保存在内存的低地址中,而数据的高(权)位,保存在内存的高地址中  为什么有大端和小端 计算机系统是以字节为单位...*pFloat = 9.0; printf("num的值为:%d\n",n); printf("*pFloat的值为:%f\n",*pFloat); 解:int n = 9是以整型存储的视角将9

    91130

    C语言--数据存储

    大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址 中; 小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地 址中。...例如:一个 16bit 的 short 型 x ,在内存中的地址为 0x0010 , x 的值为 0x1122 ,那么 0x11 为 高字节, 0x22 为低字节。...、浮点型在内存中的存储 通过上面,我们知道,整数在计算机里面的存储方式是根据二进制的原、反、补码来存储和使用的。那么,浮点数,是否也是用原反补呢?如果是用原反补,那么它的小数点是什么样的形式?...因此,浮点型跟整型的区别是,整型是直接以二进制的形式存储,二浮点型是使用了科学计数法,并且,要讲符号位、指数位和有效数字分开,分别是S、E、M。...比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。

    1.7K20

    数据存储以及内存

    变量的值存储在这个地址对应的内存单元中。不同类型的变量在内存中占据不同大小的空间,例如整数型变量通常占据4个字节的空间,而字符型变量通常占据1个字节的空间。...原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。 反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。 补码:反码+1就得到补码。 我们知道,对于整型来说,数据存放的形式是补码。...⽐如保存1.01的时候,只保存01,等到读取的时候,再把第⼀位的1加上去。这样做的⽬的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第⼀位的1舍去以后,等于可以保存24位有效数字。...字符型 字符型的数据在内存中存储的方式取决于编程语言和计算机体系结构。在C语言中,字符型数据被存储为ASCII码或Unicode编码的字符。每个字符占据一个字节的内存空间。...当我们需要在程序中处理字符型数据时,可以直接访问这些内存单元来读取或修改字符的值。

    12910

    【C语言】数据在内存中的存储方式 - 别出心裁版(内含大小端字节序)

    这句话一点也没错,可再往深一步探讨,内存又是如何以二进制的形式来组织数据的呢? 数据分为整型家族(短整型、整型、长整型),浮点数家族(单精度浮点数、双精度浮点数),当然字符类型也可归为整型家族的成员。...这里你可能会想,为什么是两倍之多,而不是三倍、四倍呢? 其实这就要考虑到,无符号整数和有符号整数的二进制表示方式了。 假设是在32位的环境之下, 一个整型占4个字节,也就是32位。...可能到这里,你也许会对为什么内存中存的是二进制的补码,而不是原码或者反码呢? 使用补码,可以将数值域和符号域一起处理了。...其实本质上都是浮点数在内存中的存储方式造成的。可以暂且试想一下,整数在内存中存储有一套规则,而浮点数在内存中存储也有一套自己的规则。...比如保存1.01的时候,只保存01,等到读取的时候,再把第⼀位的1加去。这样做的目的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第⼀位的1舍去以后,等于可以保存24位有效数字。

    16910

    【揭秘】C语言类型转换时发生了什么?

    ; //定义基本的数据的类型 char c; short s; int i; long l; float f; double d; //将整型浮点型数据赋值给指针类型 pPoint.../定义基本的数据的类型 char c; short s; int i; long l; float f; double d; //将整型浮点型数据运算之后赋值给指针类型 pPoint.../定义基本的数据的类型 char c; short s; int i; long l; float f; double d; //将整型浮点型数据混合运算赋值给指针类型 pPoint...整型类型级别从低到高依次为: int -> unsigned int -> long -> unsigned long -> long long -> unsigned long long 浮点型级别从低到高依次为...总结强调一点 进行强制类型转换后,内存空间里面的内容是不会发生改变的,改变的是运算时的临时数据对象的类型,是你去读取这个内存空间时的解析方法。

    1.2K30

    【熟视C语言】C语言——带你深度刨析数据在内存中的存储

    类型的基本归类: 整型家族: char  unsigned char    //归为整型其中一种类型  signed char     //内存大小为一个字节 //C语言规定中并未明确指出char的类型是有符号或无符号的...2.整型在内存中的存储 这里先看两个例子,在编译器中创建这两个整型并赋值,开始调试并调用内存监视窗口,看看这两个量是如何存储在内存中的。...9,而当以float的类型取出,并以%f的形式打印则以浮点型的角度看待这块空间,打印出来的值是0.000000,对于同样大小的空间,同样的内容以两个不同的角度看待,得到的是不一样的值 同样,当我们使用float...看完这些相信你一定会很好奇究竟浮点型是如何看待和使用内存的内容的。...比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。

    18820

    【进阶】C语言——深度剖析数据在内存中的存储

    空间的大小是根据不同的类型而决定的。 那接下来我们谈谈数据在所开辟内存中到底是如何存储的? 比如: int a = 20; int b = -10; 我们知道为 a 分配四个字节的空间。...2.2大小端介绍 大端(字节序)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中; 小端(字节序)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中...例如:一个 16bit 的 short 型 x ,在内存中的地址为 0x0010 , x 的值为 0x1122 ,那么 0x11 为高字节,0x22 为低字节。...3.浮点型在内存中的存储 浮点数家族包括: float、double、long double 类型 浮点数表示的范围:float.h中定义 3.1例子 3.2浮点数存储规则 num 和 *pFloat...比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。

    62820

    【C语言加油站】数据在内存中的存储

    在前面的学习中我们简单的了解了一下整型在计算机中的存储,可是导弹的弹道并不会正正好好都是使用的整型运算,其中肯定会夹杂着各种各样的浮点型的数据的运算,那么浮点型的数据在内存中又是应该如何进行存储的呢?...计算机在存储数据时,不同的数据类型所占用的内存空间也不相同: 字符类型/布尔类型占用1个字节的空间 短整型占用2个字节的空间 整型/单精度浮点型/指针类型占用4个字节的内存空间 长整型/双精度浮点型占用...那是不是说明数据在内存中就是以小端存储的方式进行存储的呢?...接下来我们就来做个简单的测试: 从这次测试结果中我们可以获取到几个信息: 在进行整型与浮点型的混合运算时,运算的结果为float类型; 当直接将该值以整型的形式进行输出时,结果会出现错误 当直接以整型与浮点型的混合运算的形式输出结果时...+之前将值强制类型转换成8个字节即可,如下所示: 可以看到,当我们在以整型的形式输出时,将变量b强制类型转换成int之后没有出现算术溢出的问题;当我们以浮点型的形式输出时,如果我们将int类型强制转换成

    11910
    领券