您的位置:首页 > 产品设计 > UI/UE

数据类型 --uint32_t / uint64_t

2013-01-26 12:15 281 查看
转载自:http://blog.sina.com.cn/s/blog_6aea878e0100tl0f.html

体会[2006-10-25]:

1>. 在写程序时注意"无符号类型"的使用, 各种类型边界值的情况.

    如:

   a> 当某个数据不可能为负数时我们一定要考虑用以下类型:

      unsigned char, unsigned int, uint32_t, size_t, uint64_t, unsignedlong int,

   b> 当有些数据你不知道是正负时一定不要用"a>"中的类型,不然他永远也不可能为负.

       

   c> 数据的边界值要多注意, 如:

      uint32_t    a,b, c;

      uint64_t   m;

      

      m = a * b + c;

      在该运算中可能出现错误, "a*b"的类型可能超过uint32_t的最大值,这时一定不要忘了类型转换.

      m = ((uint64_t)a) * b + c;

2>. 在适当的时候要会自我定义数据类型.

    我们都知道linuxC开发中的常见扩展数据类型的定义有:uint8_t, uint16_t, uint32_t, uint64_t, size_t,ssize_t, off_t .... 他之所以要自己定义出数据类型是有道理的, 如: typdef unsigned intuint32_t; 表示uint32_t为32位无符号类型数据, 其实size_t也是32位无符号数据类型,为什么不直接写"unsigned
int"呢?

    为了程序的可扩展性, 假如将来我们需要的数据大小变成了64bit时,我们只需要将typedef long longsize_t就可以了, 不然我们可要修改好多好多的地方了.
这种设计我们同样可以应用到自己的开发中来,当自己设计一个int类型保存某种数据时,但你又没把握将来是不是要用longint时你可以引用一个自己定义的数据类型的啊!

stdint.h

-----------------------------

typedef unsigned int           uint32_t;

uint32_t.c

-----------------------------

[cpp] view
plaincopy

#include <stdio.h>  

#if 0        

#include<stdint.h>   // uint32_t  

#endif       

             

typedef unsigned int      uint32_t;  

typedef unsigned long long uint64_t;  

               

int main()  

{  

       uint32_t a;  

       a = 12;  

       printf("a = %x\n", a);  

       printf("sizeof(a) = %d\n", sizeof(a));  

  

       uint64_t b;  

       b = 12;  

       printf("b = %x\n", b);  

       printf("sizeof(b) = %d\n", sizeof(b));  

}    

  

  

  

a = c  

sizeof(a) = 4  

b = c  

sizeof(b) = 8  

[cpp] view
plaincopy

int main()  

{  

    unsigned __int64 a ;  

    printf("请输入a:");  

    scanf("%I64u",&a);  

    printf("a = %I64u\n",a);  

    a = (unsigned __int64)1 << 60;  

    printf("a = %I64u\n",a);  

    a = 1 << 60;//由于没有转换类型,1移位造成越界变成了0  

    printf("a = %I64u\n",a);  

        return 0;  

}  





[cpp] view
plaincopy

#include<stdio.h>  

int main()  

{  

    unsigned long long a = (unsigned long long)1 << 63;  

    printf("%llu\n",a);  

    return 0;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux C
相关文章推荐