zoukankan      html  css  js  c++  java
  • 《c陷阱与缺陷》笔记--注意边界值

    如果要自己实现一个获取绝对值的函数,应该都没有问题,我这边也自己写了一个:

    void myabs(int i){
            if(i>=0){
                    printf("%d
    ",i);
            }else{
                    printf("%d
    ",-i);
            }
    }


    但是,这个函数真的没有问题吗?如果i的值为-2147483648,会怎样,我们来试下:

    #include <stdio.h>
    
    void myabs(int i){
            if(i>=0){
                    printf("%d
    ",i);
            }else{
                    printf("%d
    ",-i);
            }
    }
    
    int main(void){
            int a = -2147483648;
            myabs(a);
            return 0;
    }


    上面代码编译后出现如下warning:

    unsigned.c: In function 'main':
    unsigned.c:12:2: warning: this decimal constant is unsigned only in ISO C90 [enabled by default]

    执行后的结果为:

    -2147483648


    额,怎么没有变成正数呢。因为32位系统int的范围为-2147483648 ~ 2147483647,负数比正数可容纳的值大了1,

    所以-2147483648取反后就无法保存在int型变量中了。

  • 相关阅读:
    winform 计算器
    js 特效代码网址
    js 动图效果
    计算器 练习
    html frameset 练习
    SQL 仓库管理练习题
    数据库存取图片
    数据库查询Database中的表
    面向对象练习
    C#函数与SQL储存过程
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3149505.html
Copyright © 2011-2022 走看看