`
soboer
  • 浏览: 1307051 次
文章分类
社区版块
存档分类
最新评论

【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了哟。

在我们写程序的时候,脑子里第一反应可以不受数据类型的限制。我们可以首先想到这个类型占用多少个字节,就认为它就是一块儿内存。你可以理解成线段或者进度条的一部分。然后再看这个数据类型(基本数据类型)是否为有符号,然后你在写程序的时候就能有效的控制它的最大数,最小数。从而避免发生溢出等。

数据类型,说白了只是语法上的限制。你要是稍微底层一点或者指针操作,那么类型都可以忽略。一切都是在操作内存,即一切都在你的掌控之中。有符号或者无符号只是在比较运算和感官上有正负。在内存中存放的数据是没有符号可言的,你可以这么理解,一个unsigned int 变量的值为0xffffffff,那么同样是0xffffffff表示为int类型,它就等于-1。而在内存中都是同样的存储方式。所以,首先我们得跨过数据类型给我们带来的某些迷惑。不要让它限制了我们的思维。我们不能坐井底观蓝天以为自己在世外桃源,而不知自己却身处荒漠。我们得跳出去看世界。

本来想提个问题让大家去看看每种数据类型在内存中是这么存放的,在内存中观察我们的变量占用的字节数及所在位置(内存地址)的。但是可能有的朋友对VC(我是用的VC2005)不是很熟。内存窗口在哪儿也不知道。那么这个问题就留给知道的人去摸索吧,至于不知道的朋友,我会在以后专门讲调试技巧的时候讲VC的一些常用于调试时观察的窗口。

好了,继续我们的探索。下面一个数据类型是64位整数,C99 为 C 语言扩展了新的整数类型 long long ,通常被定义成 64 位宽。但是 C 标准并没有定义具体的整数类型的宽度,只定义了 long long 的级别高于 long, long 的级别高于int, int 的级别高于 short ,short 的级别高于 char 。级别高的整数类型的宽度大于等于级别较低的整数类型。占用字节数位8字节,同样需要注意的也在上面提出了。另外根据这些需要记住的16进制数,大家可以对内存有个比以前更直观的理解了。16禁止数每一位表示4位,2位表示一个字节。比如:0xff就表示一个字节(这里只是纯观察哈)了。0xf就表示字节的低4位全是1,在二进制上为: 0000 1111。够直观吧? - -

再者就是浮点数,有32位和64位。浮点数在内存中看是看不出是否为浮点数的,因为跟整数的存法没有上面区别。但程序是怎么知道那是浮点数的呢?呵呵,浮点数在存放进内存的时候是通过换算之后才存入内存的,以后我们单独列出来讲浮点数的存储。大家也可以去搜索一些先了解下。另外,很多黑客也喜欢记住一些特殊的浮点数换算后存放在内存中的16进制数。对他们逆向及分析一些病毒等有很大帮助。

还有就是void类型,大家可能最初认识void的时候是写函数的时候,比如 void function()表示没有返回值。以后在指针那节时会讲到void类型的指针。这里先做个了解。

另外其它的数据类型比如,结构体类型、枚举类型、联合等这些非基本数据类型将在后面逐个介绍。还有将小类型数据合并成大数据,合并小类型数据进行一次性赋值写入或者读取,我们将在位运算和指针章节讲解。

最后,大家可以用sizeof分别求求这些基本类型所占用的字节数。记得这些数据类型的大小对大家很有帮助。比如以后的结构体对其问题,还有位域的使用等。以后逐一介绍。

问题:

3. 研究下这些基本类型如果用printf输出,在格式化字符串的时候应该怎么写?比如:

int a = 100;

printf("%d", a); int类型使用的是%d,那么其它的呢? 还有输出16进制数占8字符宽度带0x前缀的呢?

4. 怎么判断一个无符号32位整数是否加运算溢出呢?比如:

unsigned int count = 0x80000000;

count += count;

判断count是否会加法溢出,不会溢出才执行:count += count;

【C/C++入门篇系列】

【C/C++语言入门篇】-- 序言

【C/C++语言入门篇】-- HelloWorld思考

【C/C++语言入门篇】-- 基本数据类型

【C/C++语言入门篇】-- 调试基础

【C/C++语言入门篇】-- 深入指针

【C/C++语言入门篇】-- 数组与指针

【C/C++语言入门篇】-- 结构体

【C/C++语言入门篇】-- 深入函数

【C/C++语言入门篇】-- 位运算

【C/C++语言入门篇】-- 剖析浮点数

【C/C++语言入门篇】-- 文件操作

分享到:
评论

相关推荐

    《由浅入深学C++-基础、进阶与必做300题》pdf格式 (完整版 带目录

    本书适合所有想全面学习C++开发技术的人员阅读,尤其适合没有编程基础的C++语言初学者作为入门教程,也可作为大、中院校师生和培训班的教材,对于C++语言开发爱好者,本书也有较大的参考价值。 章节目录: 第1篇 ...

    C++入门经典(第3版)+源代码

    本书详述了C++语言的各个方面,包括数据类型、程序控制、函数、指针、调试、类、重载、继承、多态性、模板、异常和输入输出等内容。每一章都以前述内容为基础,每个关键点都用具体的示例进行详细的讲解。 本书基本不...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

     ·使用visual c++ 2010支持的两种c++语言技术讲述c++编程的基础知识  ·分享c++程序的错误查找技术,并介绍通用的调试原则讨论每一个windows应用程序的结构和基本元素  ·举例说明如何使用mfc开发本地windows...

    21天学通Visual C++(第2版)

    其中,第1篇是C++数据表达篇,包括C++入门、变量和数据类型、运算符和表达式以及程序控制结构等;第2篇是C++面向过程设计篇,包括函数、编译预处理、数组、指针和构造数据类型等内容;第3篇是C++面向对象编程篇,...

    C语言入门经典(第4版)--源代码及课后练习答案

    IvorHorton还著有关于C、C++和Java的多部入门级好书,如《C语言入门经典(第4版)》和《C++入门经典(第3版)》。 译者  杨浩,知名译者,大学讲师,从事机械和计算机方面的教学和研究多年,发表论文数篇,参编和翻译的...

    21天学通C++ 第2版

    其中,第1篇是C++数据表达篇,包括C++入门、变量和数据类型、运算符和表达式以及程序控制结构等;第2篇是C++面向过程设计篇,包括函数、编译预处理、数组、指针和构造数据类型等内容;第3篇是C++面向对象编程篇,...

    [程序员成长课堂:C.标准教程].陈国建等.扫描版.pdf

    第2篇是C++基本语言篇,主要内容包括:C++基本数据类型、表达式、运算符、操作符、C++语句以及C++标准模板库等;第3篇是C++面向对象编程篇,主要内容包括:类和对象、继承、多态、运算符重载等;第4篇是C++编程实践...

    C++程序设计原理与实践(中文带附录高清版).7z.007(共9个分卷)

    本书是经典程序设计思想与C++开发实践的完美结合,是C++之父回归校园后对C++编程原理和技巧的全新阐述... 附录A C++语言概要  附录B 标准库概要  附录C Visual Studio简要入门教程  附录D 安装FLTK  附录E GUI实现

    C++STL程序员开发指南【可搜索+可编辑】

    1-1 C++与C 语言的区别................................................... 4 1-1-1 文件扩展名的改变,.............................................. 4 1-1-2 简化输入/输出手段...............................

    狂人C程序员入门必备

    1.2.2 最简单的C语言程序的基本结构 1.2.3 Dev C++ 1.3 printf()函数初步 1.3.1 简单的一般用法 1.3.2 特殊的字符 1.4 C语言的“字母”和“单词” 1.4.1 C语言的字母 1.4 12C语言的“词” 小结 概念与术语 风格与...

    新概念C语言.李一波(带详细书签).pdf

    “新概念C语言”突破了以往任何一种语言教材的旧的模式,将教学内容分为入门篇和提高篇两个篇章。在入门篇中只引进程序设计必要的语法现象,达到快速入门。激发兴趣的目的。在入门篇和提高篇之间插一个强化上机实验...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    1.XML描述数据类型。例如:"King lear"是一个标题元素; 2.CSS储存并控制元素的显示样式。例如:标题将被以18pt字体显示 3.script脚本控制元素如何动作。例如:当一个title元素"out of stock",将被用红色显示。 4...

    iPhone应用开发从入门到精通代码

    C的数据类型和表达式524.3.1 数据类型524.3.2 运算表达式544.4 Objective-C的循环语句554.4.1 for循环554.4.2 while循环564.4.3 do循环574.5 Objective-C的条件语句584.5.1 if语句584.5.2 switch语句594.5....

    网管教程 从入门到精通软件篇.txt

    网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的...

    郁金香VC++外挂编程全集中级篇2.1.6part02

    C++的数据类型:Byte,Word,DWORD,int,float API函数的调mouse_event,GetWindowRect,SetCursorPos,FindWindow,SendMessage) CE5.4工具的使用方法 中级篇内容:调试工具的使用技巧,功能CALL的概念 调试工具OD1.1的使用...

    Python入门篇之面向对象

    事实上,OOD 可以由纯结构化语言来实现,比如 C,但如果想要构造具备对象性质和特点的数据类型,就需要在程序上作更多的努力。当一门语言内建 OO 特性,OO 编程开发就会更加方便高效。另一方面,一门面向对象的语言...

    郁金香VC++外挂编程全集中级篇2.1.3part02

    C++的数据类型:Byte,Word,DWORD,int,float API函数的调mouse_event,GetWindowRect,SetCursorPos,FindWindow,SendMessage) CE5.4工具的使用方法 中级篇内容:调试工具的使用技巧,功能CALL的概念 调试工具OD1.1的使用...

    郁金香VC++初级、中级、进阶、高级+过驱动保护全套教程(已过期)

    C++的数据类型:Byte,Word,DWORD,int,float API函数的调mouse_event,GetWindowRect,SetCursorPos,FindWindow,SendMessage) CE5.4工具的使用方法 中级篇内容:调试工具的使用技巧,功能CALL的概念 调试工具OD1.1的...

Global site tag (gtag.js) - Google Analytics