uint32_t    
转载自:http://blog.sina.com.cn/s/blog_6aea878e0100tl0f.html
体会
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
-----------------------------

  1. #include <stdio.h>
  2. #if 0
  3. #include<stdint.h>   // uint32_t
  4. #endif
  5. typedef unsigned int      uint32_t;
  6. typedef unsigned long long uint64_t;
  7. int main()
  8. {
  9. uint32_t a;
  10. a = 12;
  11. printf("a = %x\n", a);
  12. printf("sizeof(a) = %d\n", sizeof(a));
  13. uint64_t b;
  14. b = 12;
  15. printf("b = %x\n", b);
  16. printf("sizeof(b) = %d\n", sizeof(b));
  17. }
  18. a = c
  19. sizeof(a) = 4
  20. b = c
  21. sizeof(b) = 8
  1. int main()
  2. {
  3. unsigned __int64 a ;
  4. printf("请输入a:");
  5. scanf("%I64u",&a);
  6. printf("a = %I64u\n",a);
  7. a = (unsigned __int64)1 << 60;
  8. printf("a = %I64u\n",a);
  9. a = 1 << 60;//由于没有转换类型,1移位造成越界变成了0
  10. printf("a = %I64u\n",a);
  11. return 0;
  12. }


  1. #include<stdio.h>
  2. int main()
  3. {
  4. unsigned long long a = (unsigned long long)1 << 63;
  5. printf("%llu\n",a);
  6. return 0;
  7. }

树的双亲表示法

由于树中的每个结点都有唯一的一个双亲结点,所以可用一组连续的存储空间(一维数组)存储树中的各个结点,数组中的一个元素表示树中的一个结点,每个结点含两个域,数据域存放结点本身信息,双亲域指示本结点的双亲结点在数组中位置。

C语言代码实现:

#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 20
typedef char ElemType;
typedef struct Snode //结点结构
{
ElemType data;
int parent;
}PNode; typedef struct //树结构
{
PNode tnode[MAX_SIZE];
int n; //结点个数
}Ptree; void InitPNode(Ptree &tree)
{
int i,j;
char ch;
printf("请输入结点个数:\n");
scanf("%d",&(tree.n)); printf("请输入结点的序及值其双亲序号:\n");
for(i=0; i<tree.n; i++)
{
fflush(stdin);
scanf("%c,%d",&ch,&j);
tree.tnode[i].data = ch;
tree.tnode[i].parent = j;
}
tree.tnode[0].parent = -1;
} void FindParent(Ptree &tree)
{
int i;
printf("请输入要查询的结点的序号\n");
scanf("%d",&i);
printf(" %c 的父亲结点序号为 %d\n",tree.tnode[i].data,tree.tnode[i].parent);
} int main()
{
Ptree tree;
InitPNode(tree);
while(1) //测试
FindParent(tree);
return 0;
}

测试结果:

C语言记录汇总的更多相关文章

  1. Go语言语法汇总(转)

    Go语言语法汇总 分类: 技术2013-09-16 14:21 3007人阅读 评论(0) 收藏 举报 go语言golang并发语法   目录(?)[+]   最近看了看GoLang,把Go语言的语法 ...

  2. 12天学好C语言——记录我的C语言学习之路(Day 12)

    12天学好C语言--记录我的C语言学习之路 Day 12: 进入最后一天的学习,用这样一个程序来综合考量指针和字符串的关系,写完这个程序,你对字符串和指针的理解应该就不错了. //输入一个字符串,内有 ...

  3. 12天学好C语言——记录我的C语言学习之路(Day 11)

    12天学好C语言--记录我的C语言学习之路 Day 11: 因为指针部分比较的难,所以我们花费的时间也是最长的,希望大家耐的住性子,多多理解,多多打代码.好了,废话不多说,来看第11天的学习. //编 ...

  4. 12天学好C语言——记录我的C语言学习之路(Day 10)

    12天学好C语言--记录我的C语言学习之路 Day 10: 接着昨天的指针部分学习,有这么一个题目: //还是四个学生,四门成绩,只要有学生一门功课没及格就输出这个学生的所有成绩 /*//progra ...

  5. 12天学好C语言——记录我的C语言学习之路(Day 9)

    12天学好C语言--记录我的C语言学习之路 Day 9: 函数部分告一段落,但是我们并不是把函数完全放下,因为函数无处不在,我们今后的程序仍然会大量运用到函数 //转入指针部分的学习,了解指针是什么 ...

  6. 12天学好C语言——记录我的C语言学习之路(Day 8)

    12天学好C语言--记录我的C语言学习之路 Day 8: 从今天开始,我们获得了C语言中很有力的一个工具,那就是函数.函数的魅力不仅于此,一个程序到最后都是由众多函数组成的,我们一定要用好函数,用熟练 ...

  7. 12天学好C语言——记录我的C语言学习之路(Day 7)

    12天学好C语言--记录我的C语言学习之路 Day 7: 昨天进行了一天的数组学习,今天大家可以先写几个昨天的程序热热身,回顾回顾,然后今天第一个新程序也是关于数组的,比较难,准备好就开始啦! //输 ...

  8. 12天学好C语言——记录我的C语言学习之路(Day 6)

    12天学好C语言--记录我的C语言学习之路 Day 6: 今天,我们要开始学习数组了. //①数组部分,数组的大小不能够动态定义.如下: //int n;   scanf("%d,& ...

  9. 12天学好C语言——记录我的C语言学习之路(Day 5)

    12天学好C语言--记录我的C语言学习之路 Day 5: 第五天的学习开始了,今天我们主要对几个程序进行编写,让自己充分的熟练编程语言,大量的题目会让自己变的精炼.以一个程序(program 5.1) ...

随机推荐

  1. HDU 4699 - Editor - [对顶栈]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4699 Problem Description Sample Input8I 2I -1I 1Q 3LD ...

  2. Vitrual Box设置linux网络连接到外网

    Vitrual Box设置linux网络连接到外网 在虚拟机上安装好linux系统之后,经常会碰到ping不通www.baidu.com的情况,此时的情况多半是网络配置上的错误,linux在网络配置有 ...

  3. day3:数据类型 str

    1,int 一个数字占用的bit数目 i = 2 print(i.bit_length()) i = 3 print(i.bit_length()) i = 5 print(i.bit_length( ...

  4. AndrewNG Deep learning课程笔记

    神经网络基础 Deep learning就是深层神经网络 神经网络的结构如下, 这是两层神经网络,输入层一般不算在内,分别是hidden layer和output layer hidden layer ...

  5. IDEA集成的 Thrift 插件进行 thrift 编译

    IDEA集成的 Thrift 插件进行 thrift 编译 注意 1.thrift文件要放在source目录,才有compile选项 2.generator list的output path不用加包名 ...

  6. 8-GPIO复用

    8-GPIO引脚复用与重映射 0.通用GPIO 在复位期间及复位刚刚完成后,复用功能尚未激活,I/O 端口被配置为输入浮空模式. 复位后,调试引脚处于复用功能上拉/下拉状态: ● PA15:JTDI ...

  7. 使用natapp将本地服务映射到外网

    1.进入https://natapp.cn注册并登陆,然后下载客户端 2. 3. 4.打开客户端开启映射

  8. django基础-01:软件框架,MVC框架,MVT

    1. 软件框架 一个公司是由公司中的各部部门来组成的,每一个部门拥有特定的职能,部门与部门之间通过相互的配合来完成让公司运转起来. 一个软件框架是由其中各个软件模块组成的,每一个模块都有特定的功能,模 ...

  9. Mysql索引详细语法

    索引相关命令 - 查看表结构 desc 表名 - 查看生成表的SQL show create table 表名 - 查看索引 show index from 表名 - 查看sql执行时间 set pr ...

  10. 并发编程---互斥锁---互斥锁与join的区别

    互斥锁 互斥锁:就是把多个进程并发,修改成一块共享数据的操作变成串行,保证是一个一个来修改的. 缺点:效率低,加锁过程复杂 优点:增加了安全性 from multiprocessing import ...