Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1559183
  • 博文数量: 327
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 3556
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-05 21:28
个人简介

东黑布衣,流浪幽燕。 真诚善良,值得信赖。

文章分类

全部博文(327)

我的朋友

分类: BSD

2018-04-26 23:43:09

long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647。而unsigned范围是[0,2^32),即0~4294967295。也就 是说,常规的32位整数只能够处理40亿以下 的数。

VS的64位整数 分别叫做__int64unsigned __int64
GCC64位整数 分别叫做signed long longunsigned long long

Codebegin

  1. #include "stdafx.h"
  2. #include <stdlib.h>
  3. #include <stdio.h>

  4. /*
  5. LINUX gcc 推荐用long long, %lld, 无符号用%llu
  6. Window VS 推荐用__int64, %I64d, 无符号用%I64u
  7. */
  8. #define ISDIGIT(a) ( (a)>='0' && (a)<='9')

  9. __int64 my_atol(const char *a)
  10. {
  11.    __int64 l = 0;

  12.    //*a是数字那么sign='+', *a不是+也不是-那么sign=0, 否则sign=*a,跳到下一个
  13.    char sign = ( ISDIGIT(*a) ) ? '+' : (* && * ? 0 : *a++;
  14.  
  15.    while ( ISDIGIT(*a) )
  16.       l = l*10 + ((*a++)&'\x0F');
  17.  
  18.    return (sign=='+') ? l : -l;
  19. }

  20. int main(int argc,char* argv[])
  21. {
  22.    char str[] = "-123456789a";
  23.    __int64 l1 = atol(str);
  24.    __int64 l2 = my_atol(str);
  25.    printf("l1 = %d,l2 = %d\n", l1, l1);//False
  26.    printf("l1 = %ld,l2 = %ld\n", l1, l1);//False
  27.    printf("l1 = %lld,l2 = %lld\n", l1, l1);//True
  28.    printf("l1 = %I64d,l2 = %I64d\n", l1, l1);//True
  29.    printf("l1 = %d,l2 = %d\n", (int)l1, (int)l1);//True
  30.    printf("l1 = %d,l2 = %d\n", (long long)l1, (long long)l1);//False
  31.    return 0;
  32. }
Code end


printf函数的返回值:正确返回输出的字符总数,错误返回负值,与此同时,输入输出流错误标志将被置值,可由指示器ferror来检查输入输出流的错误标志。利用该返回值可以有一些好玩的程序写法,比如下面一道题。

  1. /*------------------
  2. 请将以下程序中FOR循环里的语句补充完整:
  3. ------------------*/
  4. 要求输出结果:1 4 7 10 13 16 19 22 25,
  5. int main(int argc,char* argv)
  6. {
  7.    int i;
  8.    for(i=1;i<=9;i= )
  9.    printf("%3d",i);
  10.    return 0;
  11. }



  12. /*------------------
  13. Answer
  14. ------------------*/
  15. int main(int argc,char* argv)
  16. {
  17.    int i;
  18.    for(i=1;i<=9;i=10, printf(" 4 7 10 13 16 19 22 25"))
  19.    printf("%3d",i);
  20.    return 0;
  21. }

  22. /*------------------
  23. 稍稍修改一下,
  24. ------------------*/
  25. int main(int argc,char* argv)
  26. {
  27.    int i;
  28.    for(i=1;i<=9;i=printf(" 4 7 10 13 16 19 22 25\n"))
  29.    printf("%3d",i);
  30.    return 0
  31. }









阅读(2495) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~