zoukankan      html  css  js  c++  java
  • 学点 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;
    }
    

  • 相关阅读:
    leetcode刷题 557~
    Unity正交相机智能包围物体(组)方案
    Embedded Browser(ZFBrowser)使用相关问题
    Unity性能优化
    sipp的使用
    Elment清除表单验证,防止报错小技巧
    git常用命令(干货)
    文本单词one-hot编码
    86. 分隔链表 链表
    5638. 吃苹果的最大数目 优先队列
  • 原文地址:https://www.cnblogs.com/del/p/1342204.html
Copyright © 2011-2022 走看看