c语言16位只保留高8位,C语言中关于强制类型转换问题

由于朋友问到,所以整理了一份,若关于一些认识有错误还望指出......

● 如果一个运算符两边的运算数类型不同,先要将其转换为相同的类型,即较低类型转换为较高类型,然后再参加运算,转换规则如下图所示。

double ←── float 高

long

unsigned

int ←── char,short 低

●简单的说强制类型转换有显式转换、隐式转换

比如:

//比如

//此时int型的变量a就被强制转化为了float型,b不变

//此时a=3.000000 (float默认保留小数点后六位)

main()

{

int a;

int b=3;

a=(float)b;

}

再比如:

//再比如

//一个初学C会遇到的一个摄氏度转换的算法

// f为输入的温度,c为转化后的温度

main()

{

float c,f;

scanf("%f",&f);

c=5*(f-32)/9;

}

//根据优先级问题,先算括号里面的,即f-32,由于f是float型,则f-32也是float型

//5和9都是int型,5*(f-32)就是int型与float的乘积,此时的int会自动转换为float型

//同理,再除9,最终c为float型。

/**************************************************************

但是也会有下面的问题

有些同学会把 c=5*(f-32)/9的公式改写成 c=5/9*(f-32);

即先用5/9再乘括号里的东西,这样的话输出结果会直接为0,

因为:

5 9均为int型,int/int=int 所以5/9=0 0乘任何数都为0

**************************************************************/

还有关于float、double输入输出时的类型转换

//关于float double输入输出时的类型转换

//比如:

main()

{

float a;

double b;

scanf("%f",&a);

printf("%f\n",a);

scanf("%lf",&b);

printf("%lf\n",b);//或者此行代码可改为 printf("%f",b);

}

/*****************************************************************

为什么float型输入输出和double看似一样又不一样呢?

%f大家都知道是float的输入和输出

那%lf呢?这里是个必须要记住的地方,

double型变量scanf里面必须是"%lf" 你可以把double理解为long float

但是为什么double输出可以的%lf也可以是%f呢

就是相当于把%lf按照%f的类型输出了呗,一般情况下double输出用%f多些

*****************************************************************/

● 当较低类型的数据转换为较高类型时,一般只是形式上有所改变, 而不影响数据的实质内容, 而较高类型的数据转换为较低类型时则可能有些数据丢失。

以下为整理得到的一些  赋值中的类型转换 :

当赋值运算符两边的运算对象类型不同时,将要发生类型转换, 转换的规则是:把赋值运算符右侧表达式的类型转换为左侧变量的类型。具体的转换如下:

(1) 浮点型与整型

● 将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分, 只保留整数部分。 将整型值赋给浮点型变量,数值不变,只将形式改为浮点形式, 即小数点后带若干个0。注意:赋值时的类型转换实际上是强制的。

(2) 单、双精度浮点型

● 由于c语言中的浮点值总是用双精度表示的,所以float 型数据只是在尾部加0延长为doub1e型数据参加运算,然后直接赋值。doub1e型数据转换为float型时,通过截尾数来实现,截断前要进行四舍五入操作。

(3) char型与int型

● int型数值赋给char型变量时,只保留其最低8位,高位部分舍弃。

● chr型数值赋给int型变量时, 一些编译程序不管其值大小都作正数处理,而另一些编译程序在转换时,若char型数据值大于127,就作为负数处理。对于使用者来讲,如果原来char型数据取正值,转换后仍为正值;如果原来char型值可正可负,则转换后也仍然保持原值, 只是数据的内部表示形式有所不同。

(4) int型与1ong型

● long型数据赋给int型变量时,将低16位值送给int型变量,而将高16 位截断舍弃。(这里假定int型占两个字节)。

将int型数据送给long型变量时,其外部值保持不变,而内部形式有所改变。

(5) 无符号整数

● 将一个unsigned型数据赋给一个占据同样长度存储单元的整型变量时(如:unsigned→int、unsigned long→long,unsigned short→short) ,原值照赋,内部的存储方式不变,但外部值却可能改变。

● 将一个非unsigned整型数据赋给长度相同的unsigned型变量时, 内部存储形式不变,但外部表示时总是无符号的。

来源:https://www.cnblogs.com/oulton/p/6051139.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值