美文网首页
使用atoll()函数需要注意的地方

使用atoll()函数需要注意的地方

作者: delims | 来源:发表于2018-05-24 15:22 被阅读0次

    有这样一个测试程序:

    #include

    #include

    int main(void)

    {

    char *str =  "4000000000";

            int64_t a = 0;

    a = atoll(str);

    printf("a = %lld/n", a);

    printf("a = %llu/n", a);

    }

    结果会是怎样?

    结果是这样:

    a = -294967296

    a = 18446744073414584320

    如果代码修改为:

    #include

    #include

    #include  //Only she can resolve this problem

    int main(void)

    {

    char *str =  "4000000000";

            int64_t a = 0;

    a = atoll(str);

    printf("a = %lld/n", a);

    printf("a = %llu/n", a);

    }

    结果正确了:

    a = 4000000000

    a = 4000000000

    是不是很神奇?

    经过对两段代码汇编跟踪,发现出错的代码比输出正确的代码多了一个sar的命令

    sarl $0x1f %edx

    这条指令是将64位数的高32为向右移动31位。因为40亿这个数高位是1,所以整个高32会被1填满。

    看来是用atoll函数还是要慎重,注意引用头文件。不然错了都不知道怎么回事。

    相关文章

      网友评论

          本文标题:使用atoll()函数需要注意的地方

          本文链接:https://www.haomeiwen.com/subject/lbdtoxtx.html