C语言强制类型转换
发布网友
发布时间:2022-04-23 11:28
我来回答
共15个回答
热心网友
时间:2022-04-13 00:01
强制类型转换是把变量从一种类型转换为另一种数据类型。
例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型。
扩展资料:
举例说明
使用强制类型转换运算符把一个整数变量除以另一个整数变量,得到一个浮点数:
#include <stdio.h>int main()
{
int sum = 17, count = 5;
double mean;
mean = (double) sum / count;
printf("Value of mean : %f\n", mean );
}
当上面的代码被编译和执行时,它会产生下列结果:
Value of mean : 3.400000
参考资料来源:百度百科-C语言
热心网友
时间:2022-04-13 01:19
强制类型转换是把变量从一种类型转换为另一种数据类型。
例如,如果想存储一个long类型的值到一个简单的整型中,需要把long类型强制转换为int类型。可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型。
发生在同一个编译系统中,比如说把int转化为longint,在VC++6.0里面,longint和int都是4个字节,不会有问题的,但是如果把int类型转化为short类型那就装不下了,简而言之就是长类型不能转化为短类型。
int类型如果要转化为float、double、longdouble类型的时候只是末尾多了几个0,但是反之转化,就会出现数据的损失,小数部位都被省略掉了。
赋值中的类型转换
当赋值运算符两边的运算对象类型不同时,将要发生类型转换, 转换的规则是:把赋值运算符右侧表达式的类型转换为左侧变量的类型。
由于C语言中的浮点值总是用双精度表示的,所以float 型数据只是在尾部加0延长为double型数据参加运算,然后直接赋值。double型数据转换为float型时,通过截尾数来实现,截断前要进行四舍五入操作。
以上内容参考:百度百科-C语言类型强制转换
热心网友
时间:2022-04-13 02:53
好问题!
C语言中这样的转换,转换的是和(double)最近的右边的数据,运算级别低于括号,但是高于乘除、加减、赋值符等;而你考虑的k/m的问题:这个关键看进行二元运算的精度的最高级别,二元运算的两个变量中:精度较低的会自动转换为精度较高的;
#include<stdio.h>
main(){
int m,n,num;
char t='0',th;
double dou_1,dou_2,dou_3;
m=5;n=321;
num=t/((float)m/n);
dou_1=(double)(n/m);
dou_2=n/m;
dou_3=(double)n/m;
th=(double)n/m;
printf("%d,%f,%f,%f,%c",num,dou_1,dou_2,dou_3,th);
getch();
}
用这个多试试,会有较深的理解。
热心网友
时间:2022-04-13 04:45
其实是先转换k,因为()的优先级高于/,但是double精度类型高于int型m,故最后的结果还是double型 。假如:k=1,m=2,则(double)k/m=0.500000
(double)(k/m)=0.000000
热心网友
时间:2022-04-13 06:53
强制类型转换具有两种形式,称为显式强制转换和隐式强制类型转换。
1、显式强制类型转换
显式强制类型转换需要使用强制类型转换运算符,格式如下:
type(<expression>)或(type)<expression>
其中,type为类型描述符,如int,float等。<expression>为表达式。经强制类型转换运算符运算后,返回一个具有type类型的数值,这种强制类型转换操作并不改变操作数本身,运算后操作数本身未改变,例如:
int
nVar=0xab65;
char
cChar=char
(nVar);
上述强制类型转换的结果是将整型值0xab65的高端两个字节删掉,将低端两个字节的内容作为char型数值赋值给变量cChar,而经过类型转换后nVar的值并未改变。
2、隐式强制类型转换
隐式类型转换发生在赋值表达式和有返回值的函数调用表达式中。在赋值表达式中,如果赋值符左右两侧的操作数类型不同,则将赋值符右边操作数强制转换为赋值符左侧的类型数值后,赋值给赋值符左侧的变量。在函数调用时,如果return后面表达式的类型与函数返回值类型不同,则在返回值时将return后面表达式的数值强制转换为函数返回值类型后,再将值返回,如:
int
nVar;
double
dVar=3.88;
nVar=dVar;//执行本句后,nVar的值为3,而dVar的值仍是3.88
热心网友
时间:2022-04-13 09:17
(type)<expression>
其中,type为类型描述符,如int,float等。<expression>为表达式。经强制类型转换运算符运算后,返回一个具有type类型的数值,这种强制类型转换操作并不改变操作数本身,运算后操作数本身未改变,例如:
intnVar=0xab65;
charcChar=char(nVar);
上述强制类型转换的结果是将整型值0xab65的高端两个字节删掉,将低端两个字节的内容作为char型数值赋值给变量cChar,而经过类型转换后nVar的值并未改变。
热心网友
时间:2022-04-13 11:59
我怎么感觉这是单片机里的代码。
t的结果是浮点数。如果t为0点几,强转后就是0了。
如果按照你说的t等于2506.75,强转后就是2506
如果发现结果不对,可以这样调试:
直接写
t=2506.75;//t是浮点数
uint
a=(uint)t;//你看看a是不是0,肯定不是0
热心网友
时间:2022-04-13 14:57
(type)
其中,type为类型描述符,如int,float等。
为表达式。经强制类型转换运算符运算后,返回一个具有type类型的数值,这种强制类型转换操作并不改变操作数本身,运算后操作数本身未改变,例如:
intnvar=0xab65;
charcchar=char(nvar);
上述强制类型转换的结果是将整型值0xab65的高端两个字节删掉,将低端两个字节的内容作为char型数值赋值给变量cchar,而经过类型转换后nvar的值并未改变。
热心网友
时间:2022-04-13 18:11
在赋值表达式中,当左右两边数据类型不同时,右边的数据类型应变为左值(变量)的数据类型,同时编译器也能自动进行类型转换,将低字节数据类型转换为高字节类型,例如:int转换为long
int,当不同的数据类型相互赋值时还有精度缺失问题,例如:将int赋给char,只是将低八位(一个字节)赋给它,希望可以帮到你!
热心网友
时间:2022-04-13 21:43
float是4字节,700000的二进制是:
10001000101110000
char是1字节,故fFloat变量会被截断,只有低8位才会被赋给cChar,即01110000,也就是10进制的112,112正式字符“p”的ASCII码。所以程序会输出“p”。
热心网友
时间:2022-04-14 01:31
我来原创吧。。
C是c++他老爸,但是c++青出于蓝而胜于蓝,更强大。
C是过去面向过程的语言,而c++具有面向对象的特征:封装、多态、继承等特性。。c++还兼容C的一些特性,支持:面向过程、基于对象、面向对象与泛型编程。。
因此c++是非常 强大的语言,而C是非常经典的语言。
热心网友
时间:2022-04-14 05:35
你说怎么进行强制类型转换的啊?
unsigned
int
temp
=
0x0191;
float
t
=
temp
*
0.0625
*
100
+
0.5;
printf("%f---
%d\n",t,(unsigned
int
)t);
我这个样子是对的啊,输出:2506.750000---
2506
热心网友
时间:2022-04-14 09:57
(double)k/m
等价于
((double)k)/m
热心网友
时间:2022-04-14 14:51
最好写成(double)(k/m),这样看起来更清晰。