【转】【C\C++语言入门篇】 基本数据类型
前一篇我们介绍了一个简单不过的helloworld程序引出相关问题。趁着还没有忘掉那些思考方式的记忆,本篇继续延续这种思维方式的理念,介绍一下CC++中的基本数据类型。数据类型不清楚的话在以后的编程中会有很多谜团和问题。甚至一个程序的BUG找半天也没有找出来时为什么,结果才发现是加减溢出了。更加严重的还有写越界、读越界等。同样比如网络传输时的消息结构对待每个字节,每个成员的大小及类型都有很严格的追求。下面我们就逐个进行介绍。
首先、我们看32位的整数:int 、unsigned int、long、unsigned long 。这些都是基本类型,没有unsigned关键字的是有符号的,反之是无符号的。还有比如DWORD、 UINT这些也只是写别名(typedef)而已。有符号整数值得注意的是什么范围内是正数,什么范围是负数。这样对于加减运算、比较运算等有很大帮助,否则很容易溢出或者比较错误。举个例子:
unsigned int loop = 5;
for ( ; loop >= 0; --loop )
{
.......
}
这样一个循环,稍微不注意。就认为它是成立的,其实他是一个死循环。这里会减到0,成立继续减。由于是无符号,将减成最大的32位无符号整数:0xffffffff. 之后继续减,因此为死循环。说到这里,又要提出一个问题了。我们需要记住常用的一些十六进制数,比如:0xffffffff, 0x80000000, 0x7fffffff等。那么:
1. 为什么需要记住这些?这些数有什么特点?在有符号和无符号32位整数里,它们分别代表什么?
其次、是16位整数,(short)占2字节。需要注意的跟上面32位整数差不多。
2. 根据第一个问题,大家可以猜猜16位甚至8位有符号、无符号整数需要记住常用的16进制数有哪些?
再次、是8位整数,也可以理解成字符。比如char、unsigned char、bool. 这里只描述了基本的类型,其它typedef也是根据这些变了名字而已。在这里需要认识一点,char别始终认为是用在字符上,同样要有观念它是整数,而且是有符号的。大家可以做实验去了解他的范围。在上面的两个问题里,我相信你只要答对了,也就知道他的范围了。这里的bool需要说明,bool只有0或1两个状态,在内存里。因此它的范围只有0~1,嘿嘿!也就是false~true了哟。
在我们写程序的时候,脑子里第一反应可以不受数据类型的限制。我们可以首先想到这个类型占用多少个字节,就认为它就是一块儿内存。你可以理解成线段或者进度条的一部分。然后再看这个数据类型(基本数据类型)是否为有符号,然后你
相关文档:
字符输入输出:
aa = getchar();
putchar(a);
格式输出:
printf(格式控制, 输出表列);
%d 十进制数 %md m为指定的宽度 若数据位数小于m,则左端补以空格;若大于m,则按实际位数输出
%ld 长整型数据 %mld 指定字段宽度
%o 八进制整数形式 %mo
%x 十六进制整数形式 %m ......
陆其明 译
原文:
http://www.codeproject.com/cpp/complex_declarations.asp
作者:Vikram A Punathambekar
介绍
曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明:我们将从每天都能碰到的 ......
前面两篇基本把指针给介绍完了,相信大家对指针已经不是那么陌生了。也不会因为指针和数组之间的关系而导致混淆了。大家可能也迫不及待想了解下后来的知识。今天我们就介绍下结构体。
对于结构体,既然叫结构体,形象上我们可以理解其就是一堆数据集合在一起形成一个结构。就比如一个学生的信息包括:学号、姓名、班级、年 ......
前面两篇基本把指针给介绍完了,相信大家对指针已经不是那么陌生了。也不会因为指针和数组之间的关系而导致混淆了。大家可能也迫不及待想了解下后来的知识。今天我们就介绍下结构体。
对于结构体,既然叫结构体,形象上我们可以理解其就是一堆数据集合在一起形成一个结构。就比如一个学生的信息包括:学号、姓名、班级、年 ......
再上一篇,我们介绍了基本调试。之前也说了,之所以把调试放在前面讲是因为后面的文章基本都会用到调试。观察我们的程序到底发生了什么。让我们能够直接明了的看清楚问题的本质。本篇将深入一点介绍指针这个让无数初学者畏惧的东西。希望大家再看完本篇之后能对指针有新的认识,之后不再惧怕它。觉得它就那么回事。那下面我 ......