范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

C语言数据类型转换自动类型转换和强制类型转换

  自动类型转换
  自动类型转换就是编译器默默地、隐式地、偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生。
  1) 将一种类型的数据赋值给另外一种类型的变量时就会发生自动类型转换,例如:
  float f = 100;
  100 是 int 类型的数据,需要先转换为 float 类型才能赋值给变量 f。再如:
  int n = f;
  f 是 float 类型的数据,需要先转换为 int 类型才能赋值给变量 n。
  在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型转换为左边变量的类型,这可能会导致数据失真,或者精度降低;所以说,自动类型转换并不一定是安全的。对于不安全的类型转换,编译器一般会给出警告。
  2) 在不同类型的混合运算中,编译器也会自动地转换数据类型,将参与运算的所有数据先转换为同一种类型,然后再进行计算。转换的规则如下: 转换按数据长度增加的方向进行,以保证数值不失真,或者精度不降低。例如,int 和 long 参与运算时,先把 int 类型的数据转成 long 类型后再进行运算。 所有的浮点运算都是以双精度进行的,即使运算中只有 float 类型,也要先转换为 double 类型,才能进行运算。 char 和 short 参与运算时,必须先转换成 int 类型。
  下图对这种转换规则进行了更加形象地描述:
  unsigned 也即 unsigned int,此时可以省略 int,只写 unsigned。
  自动类型转换示例:
  #include int main(){  float PI = 3.14159;  int s1, r = 5;  double s2;     s1 = r * r * PI;     s2 = r * r * PI;  printf("s1=%d, s2=%f ", s1, s2);   return 0; }
  运行结果:
  s1=78, s2=78.539749
  在计算表达式 r*r*PI  时,r 和 PI 都被转换成 double 类型,表达式的结果也是 double 类型。但由于 s1 为整型,所以赋值运算的结果仍为整型,舍去了小数部分,导致数据失真。 强制类型转换
  自动类型转换是编译器根据代码的上下文环境自行判断的结果,有时候并不是那么"智能",不能满足所有的需求。如果需要,程序员也可以自己在代码中明确地提出要进行类型转换,这称为强制类型转换。
  自动类型转换是编译器默默地、隐式地进行的一种类型转换,不需要在代码中体现出来;强制类型转换是程序员明确提出的、需要通过特定格式的代码来指明的一种类型转换。换句话说,自动类型转换不需要程序员干预,强制类型转换必须有程序员干预。
  强制类型转换的格式为: (type_name) expression
  type_name  为新类型名称, expression  为表达式。例如:
  (float) a; //将变量 a 转换为 float 类型 (int)(x+y); //把表达式 x+y 的结果转换为 int 整型 (float) 100; //将数值 100(默认为int类型)转换为 float 类型
  下面是一个需要强制类型转换的经典例子:
  #include  int main(){  int sum = 103; //总数  int count = 7; //数目  double average; //平均数     average = (double) sum / count;  printf("Average is %lf! ", average);   return 0; }
  运行结果:
  Average is 14.714286!
  sum 和 count 都是 int 类型,如果不进行干预,那么 sum / count
  的运算结果也是 int 类型,小数部分将被丢弃;虽然是 average 是 double 类型,可以接收小数部分,但是心有余力不足,小数部分提前就被"阉割"了,它只能接收到整数部分,这就导致除法运算的结果严重失真。
  既然 average 是 double 类型,为何不充分利用,尽量提高运算结果的精度呢?为了达到这个目标,我们只要将 sum 或者 count 其中之一转换为 double 类型即可。上面的代码中,我们将 sum 强制转换为 double 类型,这样 sum / count
  的结果也将变成 double 类型,就可以保留小数部分了,average 接收到的值也会更加精确。
  在这段代码中,有两点需要注意: 对于除法运算,如果除数和被除数都是整数,那么运算结果也是整数,小数部分将被直接丢弃;如果除数和被除数其中有一个是小数,那么运算结果也是小数。这一点已在《C语言加减乘除运算》中进行了详细说明。 ( )  的优先级高于 /  ,对于表达式 (double) sum / count  ,会先执行 (double) sum  ,将 sum 转换为 double 类型,然后再进行除法运算,这样运算结果也是 double 类型,能够保留小数部分。注意不要写作 (double) (sum / count)  ,这样写运算结果将是 3.000000,仍然不能保留小数部分。 类型转换只是临时性的
  无论是自动类型转换还是强制类型转换,都只是为了本次运算而进行的临时性转换,转换的结果也会保存到临时的内存空间,不会改变数据本来的类型或者值。请看下面的例子:
  #include  int main(){  double total = 400.8; //总价  int count = 5; //数目  double unit; //单价  int total_int = (int)total;     unit = total / count;  printf("total=%lf, total_int=%d, unit=%lf ", total, total_int, unit);   return 0; }
  运行结果:
  total=400.800000, total_int=400, unit=80.160000
  注意看第 6 行代码,total 变量被转换成了 int 类型才赋值给 total_int 变量,而这种转换并未影响 total 变量本身的类型和值。如果 total 的值变了,那么 total 的输出结果将变为 400.000000;如果 total 的类型变了,那么 unit 的输出结果将变为 80.000000。 自动类型转换 VS 强制类型转换
  在C语言中,有些类型既可以自动转换,也可以强制转换,例如 int 到 double,float 到 int 等;而有些类型只能强制转换,不能自动转换,例如以后将要学到的 void * 到 int *,int 到 char * 等。
  可以自动转换的类型一定能够强制转换,但是,需要强制转换的类型不一定能够自动转换。现在我们学到的数据类型,既可以自动转换,又可以强制转换,以后我们还会学到一些只能强制转换而不能自动转换的类型。
  可以自动进行的类型转换一般风险较低,不会对程序带来严重的后果,例如,int 到 double 没有什么缺点,float 到 int 顶多是数值失真。只能强制进行的类型转换一般风险较高,或者行为匪夷所思,例如,char * 到 int * 就是很奇怪的一种转换,这会导致取得的值也很奇怪,再如,int 到 char * 就是风险极高的一种转换,一般会导致程序崩溃。
  使用强制类型转换时,程序员自己要意识到潜在的风险。

情人节快乐第一次听说情人节是上中专的时候,有一首歌叫没有情人的情人节,孟庭苇唱的,听着旋律还多少有点伤感,毕竟是一个人过的。那个时候对这个节日真是一点概念都没有,周围也没有人过,也没看到听到我终于失去你了我终于失去你了,可我没想过会真的失去你莫铖爱许诺,许诺也爱莫铖,其实他们都没有错,只是许诺的童年太苦了,许诺什么都不信,谁都不信,可是许诺相信莫铖。只可惜最后莫铖骗了阿诺,阿诺再也8款湘味下饭菜,没有下不去的饭春节已经过完两周了,长沙打工人小常看着家里已经见底的余粮发起了愁。两周前,要从老家回长沙的时候,妈妈和奶奶不顾反对,给他的车后备箱里塞满了家乡的特产,从奶奶自己腌的泡菜到妈妈包的饺必喝!早C晚A花果饮喝出好气色!!什么是早C晚A?早C晚A是美白界的传奇定律,被称作神苮抗老组合早c满满VC晚A满满VA今天分享一个花式内调攻略,早C晚A花果茶,偷偷喝起来,在这个夏天当一个白到反光的小仙女吧每晚一同是红星二锅头,蓝瓶和绿瓶哪个更值得买?建议搞懂再喝中国酒历史非常悠久,流传至今已有上万的白酒品牌,头部的茅台,五粮液品牌更是火到了国外,然而对国人来说,真正能称得上是国民白酒的,还得是那一瓶二锅头。二锅头酒得名于酿酒的工艺,不仅名雪落径山映霞辉来源绿色中国文万兴坤众峰来自天目山,势若骏马奔平川。我是从苏东坡诗句里初识径山的。天下径山,以五峰闻名,因径通天目山而得名。始建于唐天宝年间的径山寺,居五山十刹之首。来杭州,一直想年味回归,福建让民俗站上C位这个春节,福建的年味闹到破圈。打开手机,百万甚至千万级播放的福建民俗视频刷屏网络。冲水蹈火闹田踩街,圈圈绕绕的龙灯火把照亮夜晚,游春队伍看不到头。从沿海到山区,各有各的玩法,眼花缭国内首个悦读森林对外开放!你去上图东馆打卡了吗?日前,由上海市浦东新区和上海图书馆联手打造的国内首个悦读森林对外开放啦!悦读森林面积有20546平方米,园区整体以林趣悦读为主题,致力于打造城市的悦读森林。公园采用低影响开发的理念这几道小炒菜特适合春天吃,荤素搭配,营养美味油菜伴鸭胗用料卤煮鸭胗熟食宴友食用油油菜黑芝麻酱油醋花椒油盐做法1热锅烧水,水开后把油菜焯一下,晾凉备用2熟鸭胗切片或小块,油菜切碎段3盛盘,加入少许酱油醋花椒油盐4黑芝麻用擀面杖肝不好的人要注意!饮食切记3吃4不吃,营养均衡助肝减轻负担影响身体健康的因素有很多,如饮酒抽烟熬夜,以及不好的饮食习惯等等。而这些不好的因素普遍出现在大多数年轻人身上,所以说我们常常会发现身边一些朋友明明都是年轻小伙,但身体素质却很差。而小沉渎太湖古埠溇港明珠(7)在时光的流里,一切都会随着岁月变迁而消失。但总有印记存在,在砖瓦之间,在桥石缝隙,在传说故事里,在人们的生活点滴气质谈吐中。小沉渎,这座太湖西南岸的太湖明珠溇港遗珍,每一寸土地都在
张翰新剧低至2。4分,东八区的先生们口碑翻车,网友直呼难看近日,由张翰王晓晨杜淳经超等人主演的东八区的先生们正在热播,目前这部剧已经更新了六集,豆瓣开分2。4,成为了今年分数最低的国产剧,该消息一出,迅速登上热搜,引发全网热议。东八区的先年轻人会玩,苏翊鸣日本师妹大秀舞蹈,中国奥运冠军陪师父师娘中国奥运冠军苏翊鸣开启了新赛季的备战,而他与教练佐藤康弘一家以及师兄弟一起其乐融融。年轻人在一起,自然少不了就是晒各种照片与视频,苏翊鸣并不例外。结束了冬奥成功之旅后,苏翊鸣摇身一隐入尘烟为什么看不下去?文谭峰周末之夜,我带着仔细品咂的态度,准备去看隐入尘烟这部片子。故意在观影之前,什么资料都不碰,想给自己营造一个不带任何主观判断的体验。但奇怪的是,在片子放映到1小时左右的时间,我关于陈先义电影隐入尘烟为何要如此不堪?的几点看法刚刚看了陈先义先生的文章电影隐入尘烟为何要如此不堪?,感触颇深,忍不住言语几句,谈谈自己的看法。说个实话,陈先生站位很高,看了评论区诸多评论心里也深感忐忑!作为一名农民的后代,蓝岛这里的非遗瑰宝变成了旅游新名片!走进重庆市彭水苗族土家族自治县阿依河景区竹筏放歌阿依河水时缓时急,泛舟其间,除了欣赏峡谷风光,更有悦耳的苗族民歌行走在蚩尤九黎城,能体验到丰富多彩的苗族民俗仪式位于重庆市东南部的彭水苗族土家族自治县,是渝鄂黔重入秋之后,一年中的祛湿黄金期,记得做好这2件事,补好你的脾胃祛湿排痰养脾胃,似乎是当下永不过时的话题。在最近的这段时间里更是特别重要。今天主要跟大家分享两个人体自带的排湿开关,没事动手按按揉揉,或者灸一灸贴一贴刮一刮,就能健脾胃排痰湿,寒湿廖凡与妻子约会被拍!开200万豪车乱丢垃圾,大5岁妻子朴素似路人饿了吗?戳右边关注我们,每天给您送上最新出炉的娱乐硬核大餐!9月6日,某知名娱记曝光出廖凡和妻子霍欣私下约会时的画面,两人互动十分甜蜜,廖凡在对待老婆时也很体贴,画面引发关注。当天湖人高管夜宿科比妻子豪宅,200斤瓦妮莎要守不住了?科比妻子瓦妮莎保持单身状态,超过2年了。俗话说寡妇门前是非多,瓦妮莎门前是非也很多。科比离开后不久,瓦妮莎身边就出现了很多追求者,其中包括科比的一些前队友。美媒体报道,费舍尔福克斯最干净的女演员,因拒绝导演无理要求被封杀,如今凭借实力走红最干净的女演员,因拒绝导演无理要求被封杀,如今凭借实力走红现在很多人都想进娱乐圈,娱乐圈人每天看起来都光鲜亮丽,所以大家拼了命的也想进去。但实际上娱乐圈鱼龙混杂,里面的水很深,尤其马龙跟夏露相伴15年,不被流言蜚语困扰,儿子与妻子是他的动力马龙是国家乒乓球运动员,他在行业内有着很高的荣誉和得到了很多的奖项,在很多人眼中,马龙的球术非常出色,除了有着如此的球技让马龙有着很高的荣誉之外,这背后肯定少不了马龙背后的妻子夏露著名演员车晓含泪发文,悼念奶奶车毅,晒出与奶奶手拉手的永别照用心原创,敬请关注!9月6日,著名影视演员车晓在自己的社交平台发文奶奶,我们永远想念您,孙女泣立!一句孙女泣立,正说明车晓是含着眼泪与奶奶泣别的。刚刚过去的9月3日,电影自有后来人