整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。同时在相同位数的情况下,所能表达的整数范围变大。另外,unsigned若省略后一个关键字,大多数编译器都会认为是unsigned int。

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

数据类型 -- uint32_t 类型

 
数据类型 -- uint32_t 类型

1>. 在写程序时注意"无符号类型"的使用, 各种类型边界值的情况.
如:
a> 当某个数据不可能为负数时我们一定要考虑用以下类型:
unsigned char, unsigned int, uint32_t, size_t, uint64_t, unsigned long 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>. 在适当的时候要会自我定义数据类型.
我们都知道linux C开发中的常见扩展数据类型的定义有:uint8_t, uint16_t, uint32_t, uint64_t, size_t, ssize_t, off_t .... 他之所以要自己定义出数据类型是有道理的, 如: typdef unsigned int uint32_t; 表示uint32_t为32位无符号类型数据, 其实size_t也是32位无符号数据类型, 为什么不直接写"unsigned int"呢?
为了程序的可扩展性, 假如将来我们需要的数据大小变成了64bit时,我们只需要将typedef long long size_t就可以了, 不然我们可要修改好多好多的地方了.
这种设计我们同样可以应用到自己的开发中来,当自己设计一个int类型保存某种数据时,但你又没把握将来是不是要用long int时你可以引用一个自己定义的数据类型的啊!

stdint.h
-----------------------------
typedef unsigned int            uint32_t;

uint32_t.c
-----------------------------
#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

最新文章

  1. Nginx配置proxy_pass
  2. Python使用requirements.txt安装类库
  3. WebSphere MQ 入门指南
  4. 组合方法(ensemble method) 与adaboost提升方法
  5. perl post json数据
  6. Redis中的value包含中文显示的问题?
  7. Webcast / 技术小视频制作方法——自己动手录制video轻松搞定
  8. matlab矩阵的表示和简单操作
  9. 2 将mybatis配置到springmvc中
  10. Axure RP一个专业的快速原型设计工具
  11. hdu 3436 splay树+离散化*
  12. conda和pip相关操作
  13. vue axios 批量删除 数组参数
  14. 【Properties】获取Properties文件
  15. Apache修改了配置文件中的路径后,登录该地址网页出现问题 (其中介绍了selinux的域和安全上下文)
  16. nginx 和php设置上传大小及可以提交的内容限制
  17. firmware 固件
  18. Linux内核hlist数据结构分析
  19. php求一维数组的排列
  20. OE_ORDER_PUB.PROCESS_ORDER to Release a hold on sales order in R12

热门文章

  1. 7.25实习培训日志-Oracle SQL(一)
  2. C/C++中的static用法总结
  3. C++基础之继承类和派生类
  4. [poj 1837] Balance dp
  5. 三层登录——C#版
  6. Jmeter用BeanShell Sampler调用java写的jar包进行MD5加密
  7. Jmeter如何提取响应头部的JSESSIONID【转】
  8. 树的直径 【bzoj3363】[Usaco2004 Feb]Cow Marathon 奶牛马拉松
  9. EOS 用户权限相关命令
  10. react native 安卓生产包无法获取线上数据