C专家编程:第八章:为什么程序员无法分清万圣节和圣诞节

1、C语言中的类型提升

源类型

通常提升后的类型

char/unsigned char

int

位段(bit-field)

int

枚举(enum)

int

short/unsigned short

int

float

double

任何数组

相应类型的指针

2、隐式类型转换:算术转换、赋值转换和输出转换。

1)算术转换:进行算数运算(加、减、乘、除、取余以及符号运算)时,不同类型数必须转换成同一类型的数据才能运算,在进行运算时,以表达式中最长类型为主,将其他类型数据均转换成改类型。

2)赋值转换:进行赋值操作时,赋值运算符右边的数据类型必须转换成赋值号左边的类型,若右边的数据类型的长度大于左边,则要进行截断或舍入操作。

3)输出转换:在程序中将数据用printf 函数以指定格式输出时,当要输出的数据类型与输出格式不符时,便自动进行类型转换。

注意:较长型数据转换成短型数据输出时,其值不能超出短型数据允许的值范围,否则转换时将出错。如:

long  a = 80000;

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

运行结果是14464,因为 int 型允许的最大值为32767,80000超出此值,故结果取以32768为模的余数,即(80000 -32768)- 32768 = 14464;

3、函数的强制类型转换:

int(*compar) (const void*, const void*);

int  intcompare(const  int  *i, const int  *j)

{

return(*i -  *j);

}

将函数 intcompare() 转换成 compar() 形式:

(int  (*) (const void*, constvoid*)) intcompare

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值