c语言强制类型转换成整形,C语言强制类型转换

C语言中的类型转换

C语言中的类型转换有两种,自动与强制。

它们都有几种情况,如不同长度的转换;不同类型的转换;还有无符号与有符号数之间的转换。关键是两点,即长度不同时如何转换,在有无符号数参与时如何转换。

一般的处理方式是长变短时作一个简单的截短操作,内存的对齐方式影响这个结果。短的变长时,与符号有关,如果是有符号数,则有两种可能,符号扩展或简单地提升(即高位补0)。这个C标准没有定义,取决于编译器。所以,在将短的数据转换为长的数据时,最好是用强制的转换。无符号数就没关系了,结果是一样的。

1.强制类型转换

具体形式如下:

(类型)表达式

这个出错的机会比较小一点,因为由程序员自己控制。但要注意的,在对指针转换时,如果将一个

指向一个较小内存单元的指针转换为一个指向较大内存单元的指针,就会破坏其它内存单元的数据。

这个在自动转换中也有,故在下面一起描述。强制转换一般是在将一个空指针赋给一个在类型的指针

时的操作,如在malloc()操作时。

2.自动类型转换

这是最容易出错的,因为C语言对类型的检查比较少,这样设计的好处是给程序员提供编程上的方便,但任何事情都有两面性,自动类型转换有不少副作用。我们先来看一下自动转换在什么时候发生:

1)表达式求值

2)赋值

3)函数调用

这几种转换的细节都可以参考《C程序设计语言》(The C Programming Language, Brian

W.Kernighan, Dennis M.Ritchie)

一是有无符号数参与的表达式计算

C语言中对这个没有规定,取决于实现。看下面这个例子:

#include

int main(void)

{

long a;

unsigned short b;

unsigned long c, d;

short e;

a = -1L;

b =   1U;

d = a &#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值