C语言强制类型转换

作者&投稿:许败 (若有异议请与网页底部的电邮联系)
C语言强制类型转换~

你理解的很正确。两个问题的答案都是:对。

开始val被定义成int,就是说val的地址(就是&val)是整形数。但是一旦取出地址&val,你可以对这个地址的内容重新定义 (char *)就是告诉编译器这个地址的指针内容当char的指针来读。
这个可以看成是强制类型转换,但不是标准的,标准的强制类型转换是: (char) val 或者 char(val).

在32位的Windows操作系统中,int的数占用4个字节(byte),强制转换成char后自动取最低一个字节(就是8位),这个是自动完成的,你就不用担心了。不过因为pointer被定义成指向char的指针,它加以的时候(pointer++)仅仅加一个字节(8位)。

1、int a;int b;double c = (double) a;double c = (double) b;int a = (int) c;这就是一种强制转变方法。

2、long int c;(int)c;如果C变量是长整型,那么之下的语句就是将长整型转变成为整型的过程。

3、()内是要转变的类型,当然相互之间的转变也同时遵循可行性原则。

4、强制转变同时也是一种函数的封装,遵守一定的规则条件,当然也可以自己构造一个强制转换函数。

5、还可以将两个整数运算表达式的结果,强制转换为浮点型数据。

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

例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型。

扩展资料:

举例说明

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

#include <stdio.h>int main()

{
  int sum = 17, count = 5;

double mean;
  mean = (double) sum / count;

printf("Value of mean : %f
", mean );
}

当上面的代码被编译和执行时,它会产生下列结果:

Value of mean : 3.400000

参考资料来源:百度百科-C语言



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

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



好问题!

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();
}
用这个多试试,会有较深的理解。

其实是先转换k,因为()的优先级高于/,但是double精度类型高于int型m,故最后的结果还是double型 。假如:k=1,m=2,则(double)k/m=0.500000
(double)(k/m)=0.000000

强制类型转换具有两种形式,称为显式强制转换和隐式强制类型转换。
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++做为强类型语言,要求编译期的类型声明与检查,要求表达式中各操作数的类型(包括赋值操作的左值和右值,以及形参和实参)具有一致性,但同时也允许一定的灵活性,允许类型在一定程度上的兼容,也就是允许类型遵循一定规则下的隐式转换和强制转换。 The type of the operand(s) determine whether an expression is legal...

float型如何转换为int型?
强制类型转换。C语言提供强制类型转换符,其可表示为(类型),该操作符具有从右向左的结合型,用法示例为“(类型)变量”,则对应变量被转换为括号中 的类型,因此想把浮点型转换为整型时,括号中使用int即可:如果直接把浮点型变量赋值给整型,其会自动转换为整型:但是注意当float型变量转换为整型时...

C语言自动类型转换和强制类型都不会四舍五入吗
类型转换只会“舍”而不会“入”,也就是舍去小数部分。例如一个浮点型值为3.999,经类型转换到int型后值为3。但楼下说C语言没有四舍五入的概念,这是错误的。某些情况下程序会进行四舍五入,例如格式化输出时。以%a.bf(a和b都是数字)输出时,系统将对b+1位进行四舍五入,然后输出保留...

如下图所示 我运用强制类型转换想将a强制转换为double型,再除以2...
C语言强制类型转换的代码编写方式如下:1.首先先定义两个变量,这里以定义整型变量A,B为例。分别赋值为3和5。2.接着再定义一个变量作为结果的表示,这里以变量C为例。3.然后在运算C=A/B时,此时如果不加处理,则会输出结果0。因为此时3\/5=0.6在这里会被自动当作0。4.对A\/B的结果坐强制类型...

为什么float不能强制转换成int?
允许不同类型的数据混合运算。C 语言的灵活性与计算机硬件的机械性是一对矛盾,如处理不好,将会产生错误结果。对于某些类型的转换编译器可隐式地自动进行,不需人工干预,称这种转换为自动类型转换;而有些类型转换需要编程者显式指定,通常,把这种类型转换称为强制类型转换。

在C语言中实型怎么转化成整形
一、问题分析:你的问题中“实型转化为整型”其实就是强制类型转换;二、概念说明:强制类型转换是通过类型转换运算来实现的。其一般形式为: (类型说明符) (表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型;三、应用举例:main(){float a;a=3.1415926;(int)a; \/\/转换...

要将int类型的21517转换成char类型应该如何转换?
在C语言中,你可以使用强制类型转换来将一个int类型的数值转换为char类型。例如,如果你想将整数21517转换为char类型,你可以这样写:char myChar = (char)21517;在这个例子中,你将int类型的数值21517强制转换为char类型,并将其赋值给变量myChar。你需要注意的是,由于char类型的数值只能表示范围较小的...

long数组通过指针强制转换为char数组 c语言程序问题!
强制类型转换 当操作数的类型不同,而且不属于基本数据类型时,经常需要强制类型转换,将操作数转化为所需要的类型。强制类型转换具有两种形式,称为显式强制转换和隐式强制类型转换。1、显式强制类型转换 显式强制类型转换需要使用强制类型转换运算符,格式如下:type(<expression>)或 (type)<expression...

c语言强制转换,把负数转换成正数!
2012-03-11 C语言强制类型转换问题 41 更多关于强制转换的知识 > 网友都在找: C语言负数变正数 C语言中如何变负数为正数的函数 正在求助 换一换 回答问题,赢新手礼包 苦等21分钟: 小米贷款和蚂蚁借呗有什么不同,哪个更值得推荐 回答 苦等36分钟: 安卓系统是谁开发的,中国就是两手空空,一切技术全是......

C语言中强制类型转换运算符的优先级是?
位于第二级,结合方式为自有向左。比它优先级大的是最顶级优先级,包括:数组下标‘[]’、函数调用操作符‘()’、和各结构成员选择操作符‘.’ 。

双峰县18220413519: c语言,强制类型转换 -
叱干洋那他: 强制类型转换的一般形式为:(类型说明符)(表达式),例如: (float) a 把a转换为浮点型,(int)(x+y) 把x+y的结果转换为 整型 强制类型转换是通过类型转换运算来实现的.功能是把表达式的运算结果强制转换成类型说明符所表示的类型. 注意事项:①类型说明符和 表达式都必须加括号(单个 变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了.②无论是 强制转换或是自动转换,都只是为了本次运算的需要而对 变量的数据长度进行的临时性转换,而不改变数据说明时对该 变量定义的类型.

双峰县18220413519: C语言数据强制转换 -
叱干洋那他: 程序要多去调试啊,这个很简单的啊 给你个代码参考吧 int main() { int a = -34; //-34是开始的值,你可以设个值 unsigned int b = (unsigned int)0-(unsigned int)a; return 0; } 整理成一般表达式为:int a = originalNumber;//原始值 unsigned int b = (unsigned int)0-(unsigned int)a;//转换后的绝对值

双峰县18220413519: C语言里面的强制类型转换是什么啊? -
叱干洋那他: 前面定义int a; 后面用(double)a 强制转换成双精度

双峰县18220413519: c语言强制类型转换 -
叱干洋那他: 1、计算 5/2,因两个运算数均为整型,故进行整型除法.5/2等于2.5,取整,结果为2. 2、将2强制转换成double型,结果为2.0 3、计算2.0+2.5,浮点型加法,结果为4.5 4、将4.5强制转换成int整型,取整,结果为4

双峰县18220413519: C语言中强制类型转换什么时候用到 -
叱干洋那他: 比如说 float n=3.14, intN; 你要得到n的整数部分, 那么 整数部分 intN=(int)n; 这里就用到了强制类型转换,将float型 强制转换为int型.

双峰县18220413519: C语言中的“强制类型转换”是怎样实现的?
叱干洋那他: (type) 其中,type为类型描述符,如int,float等.为表达式.经强制类型转换运算符运算后,返回一个具有type类型的数值,这种强制类型转换操作并不改变操作数本身,运算后操作数本身未改变,例如: int nVar=0xab65; char cChar=char (nVar); 上述强制类型转换的结果是将整型值0xab65的高端两个字节删掉,将低端两个字节的内容作为char型数值赋值给变量cChar,而经过类型转换后nVar的值并未改变.

双峰县18220413519: C语言指针中怎样强制转换变量类型? -
叱干洋那他: 在前面用括号将要转换成的数据类型括起来,即(要转换的类型)待转换的变量…表达能力有限

双峰县18220413519: C语言中的强制转换指的是从高精度向低精度转换吗? -
叱干洋那他: 不是; 强制转换类型很多; 例如: (float) a 把a转换为浮点型,(int)(x+y) 把x+y的结果转换为整型. 强制类型转换是通过类型转换运算来实现的.其一般形式为: (类型说明符) (表达式) 其功能是把表达式的运算结果强制转换成...

双峰县18220413519: C语言中强制类型转换究竟改变了什么? -
叱干洋那他: 改变了地址跨度 比如 int* a; int占4个字节,这样a+1的时候实际上是加上4个地址长度 如果(char*)a + 1的话,由于char占一个字节,所以这个加一实际上是加上一个地址长度.

双峰县18220413519: c语言类型转换分为那两种? -
叱干洋那他: 需要指明的强制类型转换 long a = 10L; int b = (int)a;还有不需要指明的自动类型转换(类型提升) int a = 10; long b = a;

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网