有意思的atoll函数
来源:互联网 发布:广东国税申报软件 编辑:程序博客网 时间:2024/06/03 14:12
有这样一个测试程序:
#include <stdio.h>
#include <sys/types.h>
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 <stdio.h>
#include <sys/types.h>
#include <stdlib.h> //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函数
- C/C++ atoll函数实现
- 两个有意思的函数
- php 有意思的函数
- 一个有意思的母函数
- 两段有意思的函数
- delphi 两个有意思的函数
- delphi 两个有意思的函数
- 三个有意思的php函数
- 几个有意思的C语言小函数
- eval()一个有意思的PHP函数
- 比较有意思的比较内表的小函数
- Javascript 的函数调用模式,有意思的表现
- 有意思的进程创建函数fork()的问题
- 比较有意思的比较内表的小函数
- C++一种有意思的构造析构函数调用现象
- CUDA 示例程序reduction中两个有意思的小函数
- 有意思的进程创建函数fork() && fork() || fork() .
- OpenNI的生产节点-微软Kinect驱动
- 给表建个别名
- spring BeanCreationException 和 Exception starting filter struts2
- Hibernate的createSQLQuery查询的小例子
- 微软没有创新?
- 有意思的atoll函数
- 利用Server-u建立FTP站点
- JS获取当前浏览器URL
- 从Date型中,用Extract、to_char函数分别取年、月、日、时、分、秒的应用举例
- How to convert std::string to LPCWSTR in C++ (Unicode)
- DB2数据库脏读带锁问题
- BW:关于初始化,关于Delta机制,心得
- sql语句-linq语言-lambda表达式对照
- 在纯java中实现跨平台判断该进程是否已经启动