C语言强制类型转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言强制类型转换相关的知识,希望对你有一定的参考价值。

比如说 (double)k/m 中 他到底是强制转换k值还是强制转换k\m的值如果要转换k或k\m的值怎么转换 (k.m)都是整数常量

强制类型转换是把变量从一种类型转换为另一种数据类型。

例如,如果您想存储一个 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语言

参考技术A

强制类型转换是把变量从一种类型转换为另一种数据类型。

例如,如果想存储一个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语言类型强制转换

参考技术B 好问题!

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();

用这个多试试,会有较深的理解。本回答被提问者采纳
参考技术C 其实是先转换k,因为()的优先级高于/,但是double精度类型高于int型m,故最后的结果还是double型 。假如:k=1,m=2,则(double)k/m=0.500000
(double)(k/m)=0.000000
参考技术D 强制类型转换具有两种形式,称为显式强制转换和隐式强制类型转换。
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

C语言基础:强制类型转换

1. 强制类型转换

强制类型转换是把变量从一种类型转换为另一种数据类型。

语法:

(type_name) expression

实例:使用强制类型转换运算符把一个整数变量除以另一个整数变量,得到一个浮点数:

#include <stdio.h>

int main() 
	int sum = 16, count = 5;
	double mean;

	mean = (double) sum / count;
	printf("Value of mean : %f\\n", mean );


运行结果:

这里要注意的是强制类型转换运算符的优先级大于除法,因此 sum 的值首先被转换为 double 型,然后除以 count,得到一个类型为 double 的值。

类型转换可以是隐式的,由编译器自动执行,也可以是显式的,通过使用强制类型转换运算符来指定。在编程时,有需要类型转换的时候都用上强制类型转换运算符,是一种良好的编程习惯。


1.1 整数提升

整数提升是指把小于 int 或 unsigned int 的整数类型转换为 int 或 unsigned int 的过程。请看下面的实例,在 int 中添加一个字符:

#include <stdio.h>

int main() 
	int  i = 17;
	// char也属于整数类型
	char c = 'c'; /* ascii 值是 99 */
	int sum;

	sum = i + c;
	printf("Value of sum : %d\\n", sum );


运行结果:

这里,sum 的值为 116,因为编译器进行了整数提升,在执行实际加法运算时,把 ‘c’ 的值转换为对应的 ascii 值。


1.2 常用的算术转换

常用的算术转换是隐式地把值强制转换为相同的类型。编译器首先执行整数提升,如果操作数类型不同,则它们会被转换为下列层次中出现的最高层次的类型:

常用的算术转换不适用于赋值运算符、逻辑运算符 && 和 ||。让我们看看下面的实例来理解这个概念:

#include <stdio.h>

int main() 
	int  i = 17;
	char c = 'c'; /* ascii 值是 99 */
	float sum;

	sum = i + c;
	printf("Value of sum : %f\\n", sum );


运行结果:
在这里,c 首先被转换为整数,但是由于最后的值是 float 型的,所以会应用常用的算术转换,编译器会把 i 和 c 转换为浮点型,并把它们相加得到一个浮点数。



以上是关于C语言强制类型转换的主要内容,如果未能解决你的问题,请参考以下文章

c和c++中,对结构体进行强制类型转换!

C语言 int转char

C语言自动类型转换

C语言基础:强制类型转换

关于强制类型转换(c语言)

12)C语言之强制类型转换