📄 教学--第四章 数据类型.htm
字号:
<TABLE height=100 width="55%" border=1>
<TBODY>
<TR>
<TD width="58%" height=19>二进制值(1字节)</TD>
<TD width="42%" height=19>十进制值</TD></TR>
<TR>
<TD width="58%" height=19><FONT color=#ff0000>1</FONT>000 0000</TD>
<TD width="42%" height=19>-128</TD></TR>
<TR>
<TD width="58%" height=19><FONT color=#ff0000>1</FONT>000 0001</TD>
<TD width="42%" height=19>-127</TD></TR>
<TR>
<TD width="58%" height=19><FONT color=#ff0000>1</FONT>000 0010</TD>
<TD width="42%" height=19>-126</TD></TR>
<TR>
<TD width="58%" height=19><FONT color=#ff0000>1</FONT>000 0011</TD>
<TD width="42%" height=19>-125</TD></TR>
<TR>
<TD width="58%" height=19>...</TD>
<TD width="42%" height=19>...</TD></TR>
<TR>
<TD width="58%" height=19><FONT color=#ff0000>1</FONT>111 1110</TD>
<TD width="42%" height=19>-2</TD></TR>
<TR>
<TD width="58%" height=19><FONT color=#ff0000>1</FONT>111 1111</TD>
<TD width="42%" height=19>-1</TD></TR></TBODY></TABLE>
<P> </P>
<P>首先我们看到,从-1到-128,其二进制的最高位都是1(表中标为红色),正如我们前面的学。</P>
<P>然后我们有些奇怪地发现,<FONT color=#ff0000>1</FONT>000 0000 并没有拿来表示 -0;而<FONT
color=#ff0000>1</FONT>000 0001也不是拿来直观地表示-1。事实上,-1 用<FONT
color=#ff0000>1</FONT>111 1111来表示。</P>
<P>怎么理解这个问题呢?先得问一句是-1大还是-128大?</P>
<P>当然是 -1 大。-1是最大的负整数。以此对应,计算机中无论是字符类型,或者是整数类型,也无论这个整数是几个字节。它都用全1来表示
-1。比如一个字节的数值中:<FONT color=#ff0000>1</FONT>111 1111表示-1,那么,<FONT
color=#ff0000>1</FONT>111 1111 - 1 是什么呢?和现实中的计算结果完全一致。<FONT
color=#ff0000>1</FONT>111 1111 - 1 = <FONT color=#ff0000>1</FONT>111
1110,而<FONT color=#ff0000>1</FONT>111
1110就是-2。这样一直减下去,当减到只剩最高位用于表示符号的1以外,其它低位全为0时,就是最小的负值了,在一字节中,最小的负值是<FONT
color=#ff0000>1</FONT>000 0000,也就是-128。</P>
<P>我们以-1为例,来看看不同字节数的整数中,如何表达-1这个数:</P>
<TABLE width="100%" border=1>
<TBODY>
<TR>
<TD width="16%">字节数</TD>
<TD width="50%">二进制值</TD>
<TD width="34%">十进制值</TD></TR>
<TR>
<TD width="16%">单字节数</TD>
<TD width="50%"><FONT color=#ff0000>1</FONT>111 1111</TD>
<TD width="34%">-1</TD></TR>
<TR>
<TD width="16%">双字节数</TD>
<TD width="50%"><FONT color=#ff0000>1</FONT>111 1111 1111 1111</TD>
<TD width="34%">-1</TD></TR>
<TR>
<TD width="16%">四字节数</TD>
<TD width="50%"><FONT color=#ff0000>1</FONT>111 1111 1111 1111 1111
1111 1111 1111</TD>
<TD width="34%">-1</TD></TR></TBODY></TABLE>
<P> </P>
<P>可能有同学这时会混了:为什么 1111 1111
有时表示255,有时又表示-1?所以我再强调一下本节前面所说的第2点:你自已决定一个数是有符号还是无符号的。写程序时,指定一个量是有符号的,那么当这个量的二进制各位上都是1时,它表示的数就是-1;相反,如果事选声明这个量是无符号的,此时它表示的就是该量允许的最大值,对于一个字节的数来说,最大值就是255。</P>
<P>这一节课,看似罗嗦,但我希望每位没有编程基础,或者以前对进制,对负值、补码、反码等概念,对数据类型理解不透彻的学员,都能多花时间反复阅读,直到看懂得文中的每一张图表的意思为止。如果有困难,请发信到问答处的专门信箱:<A
href="mailto:wenda@bcbschool.com">wenda@bcbschool.com</A>
(为了方便我的查阅,请无关课程的问答或其它来信,不要发到这个邮址,谢谢)。</P>
<P> </P>
<H3><A name=4.3>4.3</A> 字符集和保留字</H3>
<H4><A name=4.3.1>4.3.1</A> 字符集</H4>
<P> </P>
<P>字符集和保留并不专属于“数据类型”的基础知识。它是一门语言最基础的东西。就像字母A-Z对于英语的作用一样。我把它放到这里,更多的是因为这是我们第一次要碰到它,在下一节,马上就要用了。幸好,
它的难度和学会26个字母差多少。</P>
<P>每种语言都使用-组字符来构造有意义的语句,组成C++程序的,最终的是以下这些字符(空格这个字符不好表示,就直接写上“空格”两字了,以后同):</P>
<P>26个字母的大小写形式:ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrst;</P>
<P>10个阿拉伯数字:0123456789;</P>
<P>其它符号:+ - * / = , . _ : ; ? \ " ' ~ | ! # % & ( ) [ ] { } ^
< > (空格)</P>
<P>其它符号,包括汉字,则可能作为程序中字符串的内容,用于显示等。</P>
<P>最后,C/C++语言是区分大小的语言,也就是说ABC和abc并不相同。这一点我们将在下一章特别强调。</P>
<P> </P>
<H4><A name=4.3.2>4.3.2</A> 保留字</H4>
<P>保留字也称关键字。它是预先定义好的标识符,这些标识符必须保留给C++语言自身专用。因为它们用来在编译过程中表示特殊的含义。比如,我们想定义一个量为整数类型,那么C++就必须有一个词来表示什么是整数类型,这个词就是一个关键字。</P>
<P>C,C++主要的关键字,我们在章末附表列出。下面先列出本章要用的关键字。</P>
<P>char :字符类型</P>
<P>int : 整型</P>
<P>float :单精度实型(浮点型)</P>
<P>double : 双精度实型</P>
<P>unsigned : 无符号类型</P>
<P>signed : 有符号类型</P>
<P> </P>
<P>bool : 布尔类型</P>
<P>true : 布尔类型的真值</P>
<P>false : 布尔类型的假值</P>
<P>void : 无类型</P>
<P> </P>
<P>sizeof : 取得指定类型的所占用的范围</P>
<P>typedef : 为某种类型取一别名</P>
<H3><A name=4.4>4.4</A> 基本数据类型</H3>
<P>前面讲的一些有关数据类型的各种基本概念,下面是数据类型这一课真正开始的时候。如果在其中你有什么概念不能理解,最好的方法就是首先回头看本章前面的内容。</P>
<H4><A name=4.4.1>4.4.1</A> 字符型和各种整型、实型</H4>
<P> </P>
<TABLE height=273 width="100%" border=1>
<TBODY>
<TR>
<TD width="22%" height=19>类型标识符</TD>
<TD width="19%" height=19>类型说明</TD>
<TD width="10%" height=19>长度<BR> (字节)</TD>
<TD width="29%" height=19>范围</TD>
<TD width="20%" height=19>备注</TD></TR>
<TR>
<TD width="22%" height=18><B>char</B></TD>
<TD width="19%" height=18>字符型</TD>
<TD width="10%" height=18>1</TD>
<TD width="29%" height=18>-128 ~ 127</TD>
<TD width="20%" height=18>-2<SUP>7</SUP> ~ (2<SUP>7</SUP> -1)</TD></TR>
<TR>
<TD width="22%" height=19><B>unsigned char</B></TD>
<TD width="19%" height=19>无符字符型</TD>
<TD width="10%" height=19>1</TD>
<TD width="29%" height=19>0 ~ 255</TD>
<TD width="20%" height=19>0 ~ (2<SUP>8</SUP> -1)</TD></TR>
<TR>
<TD width="22%" height=18><B>short int</B></TD>
<TD width="19%" height=18>短整型</TD>
<TD width="10%" height=18>2</TD>
<TD width="29%" height=18>-32768 ~ 32767</TD>
<TD width="20%" height=18>2<SUP>-15</SUP> ~ (2<SUP>15</SUP> -
1)</TD></TR>
<TR>
<TD width="22%" height=19><B>unsigned short int</B></TD>
<TD width="19%" height=19>无符短整型</TD>
<TD width="10%" height=19>2</TD>
<TD width="29%" height=19>0 ~ 65535</TD>
<TD width="20%" height=19>0 ~ (2<SUP>16</SUP> - 1)</TD></TR>
<TR>
<TD width="22%" height=19><B>int</B></TD>
<TD width="19%" height=19>整型</TD>
<TD width="10%" height=19>4</TD>
<TD width="29%" height=19>-2147483648 ~ 2147483647</TD>
<TD width="20%" height=19>-2<SUP>31</SUP> ~ (2<SUP>31</SUP> -
1)</TD></TR>
<TR>
<TD width="22%" height=19><B>unsigned int</B></TD>
<TD width="19%" height=19>无符整型</TD>
<TD width="10%" height=19>4</TD>
<TD width="29%" height=19>0 ~ 4294967295</TD>
<TD width="20%" height=19>0 ~ (2<SUP>32</SUP>-1)</TD></TR>
<TR>
<TD width="22%" height=19><B>float</B></TD>
<TD width="19%" height=19>实型(单精度)</TD>
<TD width="10%" height=19>4</TD>
<TD width="29%" height=19>1.18*10<SUP>-38</SUP> ~
3.40*10<SUP>38</SUP> </TD>
<TD width="20%" height=19>7位有效位</TD></TR>
<TR>
<TD width="22%" height=19><B>double</B></TD>
<TD width="19%" height=19>实型(双精度)</TD>
<TD width="10%" height=19>8</TD>
<TD width="29%" height=19>2.23*10<SUP>-308 </SUP>~
1.79*10<SUP>308</SUP> </TD>
<TD width="20%" height=19>15位有效位</TD></TR>
<TR>
<TD width="22%" height=19><B>long double</B></TD>
<TD width="19%" height=19>实型(长双精度)</TD>
<TD width="10%" height=19>10</TD>
<TD width="29%" height=19>3.37*10<SUP>-4932</SUP> ~
1.18*10<SUP>4932</SUP> </TD>
<TD width="20%" height=19>19位有效位</TD></TR></TBODY></TABLE>
<P> </P>
<P>unsigned 用于修饰 int 和 char 类型。它使int 或 char 类型成为无符号类型。</P>
<P>signed 是 unsigned 反义词,如 signed int
表示有符号类型,不过signed可以省略,所以上面列出char,short int,int 都是有符号类型。</P>
<P> </P>
<P>有 short int (短整型) ,所以也就有对应 long int (长整型)。long int
用于表示4个字节(32位)的整数。但是在我们现在普通使用的32位计算机中,int 默认就是4个字节,所以long也是可以省略的。</P>
<P>(较早几年,也就是Windows 3.1/DOS 流行的时候,那时的机器及操作系统都是16位的,这种情况下,int
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -