第2.7节 类型转换——表达式中float类型的操作数不会自动转化为double类型等

来源:互联网 发布:安卓4.0淘宝 编辑:程序博客网 时间:2024/06/03 21:08

1、表达式中float类型的操作数不会自动转化为double类型

#include <stdio.h>main(){    float d;    double f;    d=10.1;    f=10.2;    printf("%d",d+f);}

输出

-751619277

又如:

#include <stdio.h>main(){    float d;    double f;    d=10.1;    f=d;    printf("%d",f);}

输出:

1073741824

2、较长的整数转换成较短的整数或char类型时,超出的高位部分将被丢弃

#include <stdio.h>main(){    int i;    char c;    i=200;    c=i;    i=c;    printf("i: %d c: %d\n",i,c);    printf("%d",sizeof(int));}

输出:

i: -56 c: -564

int占4字节(编译器32位),char占1字节,200的int二进制补码,转为char截断分别如下:

int:  0000 0000 0000 0000 0000 0000 1100 1000char:                               1100 1000反码: 1100 0111原码: 1011 1000

char默认类型为signed,c为:-(8+16+32)=-56 。以下对signed、unsigned进行测试:

#include <stdio.h>main(){    int i;    char c;    i=200;    c=(unsigned char)(i);    i=c;    printf("i: %d c: %d c %d\n",i,c,(unsigned char)(i));    printf("%d",sizeof(int));}

输出:

i: -56 c: -56 c: 200
0 0