学点 C 语言(17): 数据类型 - 因类型引发的问题或错误


1. 运算结果超出类型大小:

#include <stdio.h>
#include <limits.h>

int main(void)
{
    short s1 = SHRT_MAX;
    short s2 = SHRT_MAX;
    short num1;
    int num2;

    /* 不会是期望的值 */
    num1 = s1 + s2;
    printf("%d\n", num1);

    /* 这样可以了 */
    num2 = s1 + s2;
    printf("%d\n", num2);
  
    getchar();
    return 0;
}

2. 把大的赋给小的:

#include <stdio.h>
#include <limits.h>

int main(void)
{
    unsigned int   n1 = INT_MAX;
    unsigned char  n2;
    unsigned short n3;

    n2 = n1;
    n3 = n1;

    printf("%u, %u, %u\n", n1, n2, n3);
    printf("%#X, %#X, %#X\n\n", n1, n2, n3);

    n1 = LLONG_MAX;
    printf("%lld, %u\n", LLONG_MAX, n1);
    printf("%#llx, %#x\n", LLONG_MAX, n1);
  
    getchar();
    return 0;
}

3. 把浮点数赋给整数:

#include <stdio.h>

int main(void)
{
    double pi = 3.14159265;
    int i;

    /* 只会留下整数部分 */
    i = pi;
    printf("%d\n", i);

    /* 并且不会四舍五入 */
    i = 3.6;
    printf("%d\n", i);    
  
    getchar();
    return 0;
}

4. 两个整数相除只返回整数:

#include <stdio.h>

int main(void)
{
    int n1 = 3;
    int n2 = 2;
    float f;

    /* 这样不行; 但如果你本来就只想要整数部分, 那不正中下怀吗? */
    f = 3 / 2;
    printf("%g\n", f);

    /* 这样才可以(如果只有两个运算数, 其中一个是浮点数即可, 但多了不行) */
    f = 3.0 / 2.0;
    printf("%g\n", f);

    /* 这样不行 */
    f = n1 / n2;
    printf("%g\n", f);

    /* 这样也不行 */
    f = (float)(n1 / n2);
    printf("%g\n", f);

    /* 这样才可以 */
    f = (float)(n1) / (float)(n2);
    printf("%g\n", f);      
  
    getchar();
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值