精华内容
下载资源
问答
  • 数据类型char

    char数据类型

         设计char数据类型的目的是为了容纳字符型值,字符的本质是小整型值。char的最小范围是0~127,对于char、int等基本数据类型的具体长度可查看头文件limits.h。对于缺省的char值,要么是signed char:-127~127,要么是unsigned char:0~255,这取决于编译器。当程序所使用的char型变量的值位于signed char和unsigned char的交集时,程序具有可移植性。ASCII字符集中的字符都是位于这个范围的。

    字面值(literal)

         字面值是字面值常量的缩写,这是一种实体,指定了自身的值并且不允许发生改变。在ANSI C中允许命名常量,声明为const变量,与普通变量很类似,只是在创建const变量时,就要初始化该变量,并且之后就不允许再发生改变。

    	const int Data = 1;	//声明常量
    	int const Data = 1;	//声明常量
    	//这两种的声明是等效的,选取适合自己的一种即可

    const常量在创建时获取值的方法:

        1)定义时初始化。

        2)在函数中声明const形参,当函数被调用时会得到实参的值。

    	int Fun1( char const *pstr )	//方式2
    	{
    		int Len = strlen(pstr);
    
    		return Len;
    	}
    
    	void Fun2(void)
    	{
    		int const Data = 1;	//方式1
    		int len = Fun1("string");
    	}

    字符串

        字符串的概念:是一串以NUL字节结尾的零个或多个字符。即使是空字符串依然存在作为终止符的NUL字节,在c语言中并没有字符串类型,不过c语言提供字符串常量,同时字符串以字符数组的形式存在。

          字符串常量中的字符和NUL终止字节都存储在内存的某个位置,在ANSI C中不允许修改字符串常量。若要修改字符串,则应该将它存储于字符数组中。

          当一个字符串常量出现在一个表达式中时,表达式所使用的值就是这些字符串存储的地址,而不是这些字符本身。因此,可以把字符串常量赋值给“指向字符的指针”。

    	char str[] = "string";
    	//字符数组的形式存储字符串,str是“string”字符串的一个拷贝
    	
    	char *pstr = "string";
    	//字符串常量存储的位置
    	str[1] = 'T';	//ok,字符数组可以修改
    	*(pstr+1) = 'T';	//error,字符串常量不可修改


    展开全文
  • 抽象数据类型概念

    千次阅读 2018-12-06 19:10:33
    数据类型与抽象数据类型的异同 首先数据结构定义为一个二元组 Data_Stucture(D,S),即两个集合,D是数据元素的集合,而S是数据元素之间或多个关系的集合 抽象数据类型其实本质上就是数据类型,涉及数据的存储以及如何...

    数据类型与抽象数据类型的异同
    首先数据结构定义为一个二元组 Data_Stucture(D,S),即两个集合,D是数据元素的集合,而S是数据元素之间或多个关系的集合
    抽象数据类型其实本质上就是数据类型,涉及数据的存储以及如何用存储来反映数据元素之间的关系,它定义的为一个三元组(D,S,P),P是定义的一组针对存储的数据操作(如插入,删除,排序等).所以D是元素的集合,而S表示的这些元素之间关系的集合,而P表示的是对这些数据进行操作的集合
    抽象数据类型本质上和数据类型是一个概念,但是其特征是使用与实现分离,实行封装和信息
    隐蔽,(独立于计算机)

    注意区分数据类型以及抽象数据类型
    多行数据类型这种数据类型我们在这不做深入的了解,只需要知道它是值的成分不确定的数据类型
    抽象数据类型如何表示和实现
    抽象数据类型可以使用固有的数据类型来进行实现,关于具体实现的步骤,我们在后面的博客中做详细的解答

    展开全文
  • java数据类型基础概念

    2021-01-09 15:28:27
    1.数据类型 1. 1基本数据类型 4类8种 整数型:byte1、short2、int4[默认]、long8 浮点型:float4(单精度)、double8(双精度[默认]) 字符型:char2 布尔型:boolen1 (*****注意事项:浮点数当中默认类型是double...

    1.数据类型

    1. 1基本数据类型

    4类8种

    整数型:byte1、short2、int4[默认]、long8
    浮点型:float4(单精度)、double8(双精度[默认])
    字符型:char2
    布尔型:boolen1
    (*****注意事项:浮点数当中默认类型是double,如果一定要使用float类型,需要加上一个后缀F
    如果是整数,默认为int类型,若使用long类型,需加上一个后缀L。推荐使用大写字母后缀)

    1.2引用数据类型

    字符串、数组、类、接口、Lambda

    2.常量 6种常量类型的打印输出

    //字符串常量
    System.out.println("ABC");
    System.out.println("");//字符串两个双引号中间的内容为空
    
    //整数常量
    System.out.println("30");
    System.out.println("-500")
    
    //浮点数常量(小数)
    System.out.println("-2.6");
    
    //字符常量
    System.out.println('A');
    System.out.println('6');
    System.out.println('');//两个单引号之间必须有且仅有一个字符,不能为空
    //System.out.println('AB');//两个单引号之间必须有且仅有一个字符,两个不行
    
    //布尔型常量
    System.out.println(true);
    
    //空常量。空常量不能直接用来打印输出
    //System.out.println(null); 
    
    

    3.变量

    变量:程序运行期间,内容可以发生改变的量
    数据类型 变量名称 ; //创建了一个变量
    变量名称 = 数据值;//赋值

    数据类型 变量名称 = 数据值;//在创建一个变量的同时,立即放入指定的数据值

    4.数据类型转换

    1.当数据类型不一样时,将会发生数据类型转换。
    自动类型转换(隐式)

    • 1.特点:代码不需要进行特殊处理,自动完成。
    • 2.规则:数据范围从小到大
    //左边是long类型,右边是默认的int类型,左右不一样
    //一个等号代表复制,将右侧的int常量,交给左侧的long变量进行存储
    //int---->long,符合数据范围从小到大的要求
    //这行代码进行了自动转换
    long num = 100;
    System.out.println(num1); //100
    
    //同样符合规则,进行了自动类型转换
    double nun2 = 2.5F;
    
    //左边是float类型,右边是long类型,左右不一样
    //long----->float,范围float更大一些,符合从小到大,发生自动类型准换
    float num3 = 30L; //30.0
    
    

    2.强制类型转换

    • 1.特点:代码需要进行特殊的格式处理,不能自动完成
    • 2.格式:范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的数据

    (***注意事项:
    1.强制类型转换一般不推荐使用,因为有可能发生精度损失(说小数)、数据溢出(值整数)
    2.byte/short/char这三种类型都可以发生数学运算,例如加法“+”
    )

    int num = (int) 100L;  //100
    
    ..long 强制转换成为int类型
    int num2 = (int)6000000000L
    System.out.println(num2);//1705032704 
    
    //double---->int 强制类型转换
    int num3 = (int)3.99;
    System.out.println(num3); //3
    
    展开全文
  • 数据类型基本概念

    千次阅读 2008-07-07 15:33:00
    4.2 数据类型基本概念4.2.1 理解数据类型数据类型”就是这么一个很好理解的概念。我们的重点是了解在计算机编程世界中,有哪些基本的数据类型?在人类世界里,数据类型那就多了,把人类的对万物划分类型的方法照搬...
     
    

    4.2 数据类型基本概念

    4.2.1 理解数据类型

    “数据类型”就是这么一个很好理解的概念。我们的重点是了解在计算机编程世界中,有哪些基本的数据类型?在人类世界里,数据类型那就多了,把人类的对万物划分类型的方法照搬入计算机世界,显然不可能。怎么办呢?方法就是:抽象。

    计算机先哲们为我们做了这一切。其中,最重要类型,也称为C/C++语言的基本数据类型,只有两个:“数值”和“字符”。

    第一是“数值类型”。这样,在职工的信息中,譬如年纪,工龄、工资就有了归属。你现在需要暂时不将目光从屏幕前移开,想一想“数值类型”是一个多好的抽象结果!无论进行任何信息管理,离开了“数”,还能管理什么?

     

    第二是“字符类型”。像职工姓名或家庭住址,这些由字符类型的数据组成。你可能想不到的还有,职工的电话号码 010-1234567,这也是由字符类型数据组成。0、1、2、3不是数字吗?应该属于上面的“数值”类型吧?嗯,你听我说:现实生活中,数字被广泛地应用在两种不同范畴:其一是那些典型的,需要进行计算的场合。比如鸡蛋1斤2.3元;其二则那些只用来表示符号的范畴。比如电话号码,比如车牌号。把两个电话号码进行相加或相减的操作是没有意义的。基于数字的两种完全不一样的使用范畴,所以在被抽象到计算机程序语言时,数字被分到“数值”和“字符”两种类型中。但字符类型并不只有阿拉伯数字,键盘上的号,都属于字符类型。

     

    在C/C++中,“字符类型”其实也可归入数值类型。在某些情况下,它仍然会被用来参与计算。比如在计算机中,字符‘A’加1后,会得到下一个字符‘B’,这种操作符合我们的习惯。

    4.2.2 理解整型和实型

    数值类型又被分为“整型”和“实型”。整型就是不带小数位的数,而实型则是指带小数位的数,也称为“浮点数”。我们在生活中一般并不做如此区分。譬如说鸡蛋的价格罢,今儿便宜了,一斤2块整,但这不防碍明儿价涨了,我们说成:涨了,2.30元一斤。在编程时可不能这样,你必须事先考虑到鸡蛋的价格是必须带小数的,就算现在是2块整,也得将价格定为实型,否则,涨成2块3时,计算机会把那0.3元给丢了,还是变成2元整。

    你会问为什么不直接就定一个实型就好呢?实型不就包含了整型的值吗(如2.0等于2元)?好!问得好,我不喜欢书上说什么就记什么,一个“为什么”也不去想的学习方法。由于能力的限制,大多数人如你我,都不能为这个世界发明奉献什么新技术,我们只能作为技术的“接受者”而活在这个世上。然而正因为只能作为接受者,我们就更应该在学习任何技术前,先学会从一定的高度来询问:为什么会有这个技术(这个技术为什么会出现)?我现在需要这个技术吗(必竟学习需要占用时间)?这么做并非是一种消极态度,相反,它的积极意议在于:经过这种思考,你不仅可以把有限的时间花在值的学习上,而且只有弄明白了一样技术(或技术的概念)产生的需要,我们才有可能真正理解它,从而比别人学得更深刻更本质。

    一个问题牵出一堆废话,回答却很简单:因为在计算机里,对整数的运算要远远快于对浮点数的运算,所以,在人类的思维习惯与计算机特点之间,必须做一个折衷。

    折衷的结果就是虽然都是数值类型,但程序员在程序时,必须事先想好,哪些数据是必须带小数计算的,那些数据定为实型,比如工资,没有哪个员工会认为老板可以将自已工资中的小数位忽略不计;而那些可以不用,或者可以不计较小数的数值,则被建议设计成整型,比如人的年纪,虽然可以,但我们很少需要有类似1.6岁这种说法。想想,假如一位女士说自已28岁,而你却立刻纠正她:“不,准确地说,您已经28.7岁了”……结局会怎样呢?为了那0.7岁,不仅你的程序会跑得慢,而且会倍受女人的白眼杀伤。

    想想其实也很自然:工资必须设计成实型,而年龄虽然不是必须,但建议设计成整型。

    4.2.3 理解数值的范围

    然而事情并未就此结束。

    顾及计算机的运行速度,人(程序员)做出了妥协,必须面对“整型”或“实型”的考虑。另一方面,和速度同样重要的是计算机的空间的考虑。它让程序员必须再做一步妥协。

    小时候你一定有过这样的经历:你说100,另一个小伙伴就说101。你说1000,他就说1001,你说10000,他就说:那我10001。总之他就是要比你大1。这种游戏不会有分出胜负的结局,只会让你郁闷为什么就不能有个最大数让你说了以后,那家伙就再了无法往上加1了!现在你学编程,儿时的“妄想”终于在计算机的世界中实现了。在计算机世界中,你可以说一个数,当别人再住这个数加1时,真不幸,计算机会告诉他说:加1是加1了,可是结果变成0,甚至是负数。

    这就是计算机的空间问题:任何一个量,都有一个大的上限,和小的下限,出了这个范围(比上限还大,比下限还小),就会称为溢出。这是一种物理的现实,也是一种人为的规定。为什么要这样规定?原因是计算机的存储器,特别是其中很重要的内存(见上章),其可存储的数据多少总是有限度。(而且,同样大小数,2进制的表达形式比10进制长得多),如果允许编程像生活中一样任何一个数都可以很大很大,也就是这个量表达起来将很长很长,那么存储器的空间就会很快用完!(无穷大就不用说了,因为不可能有无穷大的存储器)。

    就是这样,数值类型在被划分为整型和实型后,将根据所占用的空间而被继续划分为几种不同类型。而我们,在考虑工资必须设计成带小数的实型后,必须再面对一个设计上的考虑,工资这个量在程序里要占多大空间?依据其实很简单,就看你的单位最高月薪是多少,凭此找到一个合适的类型。比如月薪不超过1万元,那我们选择一个刚刚可以包含10000的数据类型。

    两种基础类型:数值类型和字符类型,前者说了很多,现在我们也来对字符类型做一些附加说明。字符类型要比数值类型简单得多:它不能带小数,所以没有整型实型之说。它占用1个字节,已经是计算机能单独处理的最小空间单位,所以也不存在继续分为不同空间长度的问题。因此,我们将以它为例,详细说明有关数据类型的一些基本而重要的概念。

    第1、由于计算机和编程都是老外的发明,而老外生活中常用的的字符并不多——主要是阿拉伯数字、英文字母、标点符号等——所以字符的宽度被定为1个字节(如果忘了什么叫字节,请看上章)。

    1字节 = 8位,所以它能表示的最大数当然是8位都是1(既然2进制的数只能是0或1,如果是我们常见的10进制,那就8位都为9,这样说,你该懂了?)。

    1字节的二进制数中,最大的数:11111111。

    这个数的大小是多少呢?让我们来把它转换为十进制数。

    无论是什么进制,都是左边是高位,右边是低位。第一章中我们说过,10进制数的最低位(个)位的权值是100,第二位是101,第三位是102……,用小学课本上的说法就是:个位上的数表示几个1,十位上的数表示向个10,百位上的数表示几个100……

    二进制数则是:第1位数表示几个1 (20),第2位数表示几个2(21),第3位数表示几个4(22),第4位数表示向个8(23)……

    在C/C++中,很多计数的习惯都是从0开始,所以,在你看明白上面那行内容后,让我们立刻改口换成下面的说法,以后我们只用这种说法:

    二进制数:第0位数表示几个1 (20),第1位数表示几个2(21),第3位数表示几个4(22),第4位数表示向个8(23)……

    按照这种说法,我们可以发现,从右向左数,第n位数的权值 = 2的n次方。

    二进制各位权值的计算方法: 第n位权值 = 2n

     

    下表详细地表示 2进制数:11111111 是如何逐位计算,累加得到10进制的值:

    第几位 7 6 5 4 3 2 1 0 合计
    权值 27=128 26=64 25=32 24=16 23=8 22=4 21=2 20=1
    2进制 1 1 1 1 1 1 1 1
    10进制 128 64 32 16 8 4 2 1  255
    上表表示了这么一个计算过程(*表示乘号):

    1 * 27 + 1 * 26 + 1 * 25 + 1 * 24 + 1 * 23 + 1 * 22 + 1 * 21 + 1* 20 = 255

    (顺便说一句,如果你忘了20 等于多少有点迟疑,请复习一下初中的数学知识:任何数的0次方都等于1)

    结果是:

    11111111(b) = 255 (d)

    (为不了互相混淆,我们在书中常用(b)来表示前面的数是2进制的,而(d)则表示该数是10进制数。同样地,另有8进制数用(o)表示,16进制用(h)表示。不过记住了,这只是在书中使用,在程序中,另有一套表示方法。)

     

    以前我们知道1个字节有8位,现在通过计算,我们又得知:1个字节可以表达的最大的数是255,也就是说表示0~255这256个数。

    那么两个字节(双字节数)呢?双字节共16位。 1111111111111111,这个数并不大,但长得有点眼晕,从现在起,我们要学会这样来表达二制数:

    1111 1111 1111 1111,即每4位隔一空格。

    双字节数最大值为:

    1 * 215 + 1 *214 + 1* 213 + 1 * 212 + 1 * 211 + 1 * 210 + …… + 1 * 22 + 1 * 21 + 1* 20 = 65535

     

    很自然,我们可以想到,一种数据类型允许的最大值,和它的位数有关。具体的计算方法方法是,如果它有n位,那么最大值就是:

    n位二进制数的最大值:1 * 2(n-1) + 1 * 2(n-2) + ... + 1 * 20

     

    任何一种基本数据类型,都有其范围。比如字符类型,它的最大值是255,那么,当一个数在其类型的范围已经是最大值时,如果再往上加1,就会照成“溢出”。

    其实,有限定的范围的数量,并不只在计算机中出现。钟表就是一个例子。10点再加1点是11点,再加1点是12点,可是再加1点,就又回到1点。再如汽车的行程表,假设最多只能显示99999公里,当达到最高值后继续行驶,行程表就会显示为00000公里。

    4.2.4 理解有符号数和无符号数

    回头看上一节,我们所讲的数都是正数。同样是年纪和工资,前者不需要有负值,但后者可能需要——至少所有的老板都这样认为。

    那么,负数在计算机中如何表示呢?

    这一点,你可能听过两种不同的回答。

    一种是教科书,它会告诉你:计算机用“补码”表示负数。可是有关“补码”的概念一说就得一节课,这一些我们需要在第6章中用一章的篇幅讲2进制的一切。再者,用“补码”表示负数,其实一种公式,公式的作用在于告诉你,想得问题的答案,应该如何计算。却并没有告诉你为什么用这个公式就可以和答案? 

    另一种是一些程序员告诉你的:用二进制数的最高位表示符号,最高位是0,表示正数,最高位是1,表示负数。这种说法本身没错,可是如果没有下文,那么它就是错的。至少它不能解释,为什么字符类型的-1用二进制表示是“1111 1111”(16进制为FF);而不是我们更能理解的“1000 0001”。(为什么说后者更好理解呢?因为既然说最高位是1时表示负数,那1000 0001不是正好是-1吗?)。

    让我们从头说起。

    1、你自已决定是否需要有正负。

    就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决定某个量是否需要正负。如果这个量不会有负值,那么我们可以定它为带正负的类型。

    在计算机中,可以区分正负的类型,称为有符类型,无正负的类型(只有正值),称为无符类型。

    数值类型分为整型或实型,其中整型又分为无符类型或有符类型,而实型则只有符类型。

    字符类型也分为有符和无符类型。

    比如有两个量,年龄和库存,我们可以定前者为无符的字符类型,后者定为有符的整数类型。

    2、使用二制数中的最高位表示正负。

    首先得知道最高位是哪一位?1个字节的类型,如字符类型,最高位是第7位,2个字节的数,最高位是第15位,4个字节的数,最高位是第31位。不同长度的数值类型,其最高位也就不同,但总是最左边的那位(如下示意)。字符类型固定是1个字节,所以最高位总是第7位。

    (红色为最高位)

    单字节数: 1111 1111

    双字节数: 1111 1111 1111 1111

    四字节数: 1111 1111 1111 1111 1111 1111 1111 1111

     

    当我们指定一个数量是无符号类型时,那么其最高位的1或0,和其它位一样,用来表示该数的大小。

    当我们指定一个数量是无符号类型时,此时,最高数称为“符号位”。为1时,表示该数为负值,为0时表示为正值。

     

    3、无符号数和有符号数的范围区别。

    无符号数中,所有的位都用于直接表示该值的大小。有符号数中最高位用于表示正负,所以,当为正值时,该数的最大值就会变小。我们举一个字节的数值对比:

    无符号数: 1111 1111   值:255 1* 27 + 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20

    有符号数: 0111 1111   值:127         1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20

     

    同样是一个字节,无符号数的最大值是255,而有符号数的最大值是127。原因是有符号数中的最高位被挪去表示符号了。并且,我们知道,最高位的权值也是最高的(对于1字节数来说是2的7次方=128),所以仅仅少于一位,最大值一下子减半。

    不过,有符号数的长处是它可以表示负数。因此,虽然它的在最大值缩水了,却在负值的方向出现了伸展。我们仍一个字节的数值对比:

    无符号数:                       0 ----------------- 255

    有符号数:        -128 --------- 0 ---------- 127

     

    同样是一个字节,无符号的最小值是 0 ,而有符号数的最小值是-128。所以二者能表达的不同的数值的个数都一样是256个。只不过前者表达的是0到255这256个数,后者表达的是-128到+127这256个数。

    一个有符号的数据类型的最小值是如何计算出来的呢?

    有符号的数据类型的最大值的计算方法完全和无符号一样,只不过它少了一个最高位(见第3点)。但在负值范围内,数值的计算方法不能直接使用1* 26 + 1* 25 的公式进行转换。在计算机中,负数除为最高位为1以外,还采用补码形式进行表达。所以在计算其值前,需要对补码进行还原。这些内容我们将在第六章中的二进制知识中统一学习。

    这里,先直观地看一眼补码的形式:

    以我们原有的数学经验,在10进制中:1 表示正1,而加上负号:-1 表示和1相对的负值。

    那么,我们会很容易认为在2进制中(1个字节): 0000 0001 表示正1,则高位为1后:1000 0001应该表示-1。

    然而,事实上计算机中的规定有些相反,请看下表:

     

    二进制值(1字节) 十进制值
    1000 0000 -128
    1000 0001 -127
    1000 0010 -126
    1000 0011 -125
    ... ...
    1111 1110 -2
    1111 1111 -1

     

    首先我们看到,从-1到-128,其二进制的最高位都是1(表中标为红色),正如我们前面的学。

    然后我们有些奇怪地发现,1000 0000 并没有拿来表示 -0;而1000 0001也不是拿来直观地表示-1。事实上,-1 用1111 1111来表示。

    怎么理解这个问题呢?先得问一句是-1大还是-128大?

    当然是 -1 大。-1是最大的负整数。以此对应,计算机中无论是字符类型,或者是整数类型,也无论这个整数是几个字节。它都用全1来表示 -1。比如一个字节的数值中:1111 1111表示-1,那么,1111 1111 - 1 是什么呢?和现实中的计算结果完全一致。1111 1111 - 1 = 1111 1110,而1111 1110就是-2。这样一直减下去,当减到只剩最高位用于表示符号的1以外,其它低位全为0时,就是最小的负值了,在一字节中,最小的负值是1000 0000,也就是-128。

    我们以-1为例,来看看不同字节数的整数中,如何表达-1这个数:

    字节数 二进制值 十进制值
    单字节数 1111 1111 -1
    双字节数 1111 1111 1111 1111 -1
    四字节数 1111 1111 1111 1111 1111 1111 1111 1111 -1

     

    可能有同学这时会混了:为什么 1111 1111 有时表示255,有时又表示-1?所以我再强调一下本节前面所说的第2点:你自已决定一个数是有符号还是无符号的。写程序时,指定一个量是有符号的,那么当这个量的二进制各位上都是1时,它表示的数就是-1;相反,如果事选声明这个量是无符号的,此时它表示的就是该量允许的最大值,对于一个字节的数来说,最大值就是255。

    这一节课,看似罗嗦,但我希望每位没有编程基础,或者以前对进制,对负值、补码、反码等概念,对数据类型理解不透彻的学员,都能多花时间反复阅读,直到看懂得文中的每一张图表的意思为止。如果有困难,请发信到问答处的专门信箱:wenda@bcbschool.com (为了方便我的查阅,请无关课程的问答或其它来信,不要发到这个邮址,谢谢)。

     

    4.3 字符集和保留字

    4.3.1 字符集

     

    字符集和保留并不专属于“数据类型”的基础知识。它是一门语言最基础的东西。就像字母A-Z对于英语的作用一样。我把它放到这里,更多的是因为这是我们第一次要碰到它,在下一节,马上就要用了。幸好, 它的难度和学会26个字母差多少。

    每种语言都使用-组字符来构造有意义的语句,组成C++程序的,最终的是以下这些字符(空格这个字符不好表示,就直接写上“空格”两字了,以后同):

    26个字母的大小写形式:ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrst;

    10个阿拉伯数字:0123456789;

    其它符号:+ - * / = , . _ : ; ? / " ' ~ | ! # % & ( ) [ ] { } ^  < > (空格)

    其它符号,包括汉字,则可能作为程序中字符串的内容,用于显示等。

    最后,C/C++语言是区分大小的语言,也就是说ABC和abc并不相同。这一点我们将在下一章特别强调。

     

    4.3.2 保留字

    保留字也称关键字。它是预先定义好的标识符,这些标识符必须保留给C++语言自身专用。因为它们用来在编译过程中表示特殊的含义。比如,我们想定义一个量为整数类型,那么C++就必须有一个词来表示什么是整数类型,这个词就是一个关键字。

    C,C++主要的关键字,我们在章末附表列出。下面先列出本章要用的关键字。

    char    :字符类型

    int     : 整型

    float   :单精度实型(浮点型)

    double  : 双精度实型

    unsigned : 无符号类型

    signed : 有符号类型

     

    bool : 布尔类型

    true : 布尔类型的真值

    false : 布尔类型的假值

    void   : 无类型

     

    sizeof : 取得指定类型的所占用的范围

    typedef : 为某种类型取一别名

    4.4 基本数据类型

    前面讲的一些有关数据类型的各种基本概念,下面是数据类型这一课真正开始的时候。如果在其中你有什么概念不能理解,最好的方法就是首先回头看本章前面的内容。

    4.4.1 字符型和各种整型、实型

     

    类型标识符 类型说明 长度   (字节) 范围 备注
    char 字符型 1 -128 ~ 127 -27 ~ (27 -1)
    unsigned char 无符字符型 1 0 ~ 255 0 ~ (28 -1)
    short int 短整型 2 -32768 ~ 32767 2-15 ~ (215 - 1)
    unsigned short int 无符短整型 2 0 ~ 65535 0 ~ (216 - 1)
    int 整型 4 -2147483648 ~ 2147483647 -231 ~ (231 - 1)
    unsigned int 无符整型 4 0 ~ 4294967295 0 ~ (232-1)
    float 实型(单精度) 4 1.18*10-38 ~ 3.40*1038  7位有效位
    double 实型(双精度) 8 2.23*10-308 ~ 1.79*10308  15位有效位
    long double 实型(长双精度) 10 3.37*10-4932 ~ 1.18*104932  19位有效位

     

    unsigned 用于修饰 int 和 char 类型。它使int 或 char 类型成为无符号类型。

    signed 是 unsigned 反义词,如 signed int 表示有符号类型,不过signed可以省略,所以上面列出char,short int,int 都是有符号类型。

     

    有 short int (短整型) ,所以也就有对应 long int (长整型)。long int 用于表示4个字节(32位)的整数。但是在我们现在普通使用的32位计算机中,int 默认就是4个字节,所以long也是可以省略的。

    (较早几年,也就是Windows 3.1/DOS 流行的时候,那时的机器及操作系统都是16位的,这种情况下,int 默认是16位的。此时,如果想实现32位整数,就必须定义为这样的类型:long int)。

    在浮点数方面,我们最常用的将是 double。它的精度适合于我们日常中的各种运算。当然,float的精度也在很多情况下也是符合要求的。

    4.4.2 布尔型(bool)和无类型(void)

    除字符型,整型,实型以外,布尔型和无类型也是较常用的两种数据类型。

     

    布尔型(bool)

    布尔类型是C++的内容,C语言没有这一类型。

    布尔类型的数据只有两种值:true(真) 或 false(假)。

    什么时候使用布尔型呢?

    履历表中一般有“婚否”这一项,婚否这种数据就适于用真或假来表示。性别男女,有时也会用布尔值表示,(一般程序都不约而同地把男性设置“真”,女性设置为“假”。)

     

    无类型(void)

    这个类型比较怪“无”类型。是的,没有类型的类型。或者我们这样认为比较好接受:在不需要明确指定类型的时候,我们可能使用 void 来表示。

    4.4.3 为数据类型起别名:typedef

    用法: typedef 原类型名 类型的别名;

     

    为什么要给现成的数据类型起别名?当然也是为了迁就我们为人类。就像我们给人家起绰号一样,形象好记,不易混淆。

    比如,我们在编程中需要使用一些年龄数据,应该使用整型(int)类型。另我们还使用到身高的数据,由于单位采用“厘米”,所以也可能使用int类型。两种数据属于同一数据类型,但所代表的内容却不容混淆。我们可以使用typedef来临时为int取两个别名:

     

    typedef int AGE;

    typedef int STATURE;

     

    通过以上两行话(行末都需要以分号结束),我们获得了两种新的数据类型名称。它们的一切属性都和其原名 int的数据类型完全一致。只是名字变得很有意义一点而已。

    这里为了说明问题举一简单的例子,事实上例子的情况并不值得使用typedef来取别名。typedef常用来为一些复杂的类型取一简单且意义明了的别名。比如定义函数的指针。在C++ Builder的控件编写中,更是有非常频繁地用typedef来为那些定义复杂的事件函数(类成员函数的指针)取别名。

    4.5 sizeof 的使用

    用法: sizeof(数据类型)

           sizeof(变量)

     

    C/C++提供了关键字sizeof,用于在程序中测试某一数据类型的占用多少字节。sizeof有两种用法,效果一样,由于我们还没有学变量,所以我们先讲第一种。 

    sizeof是一种计算,计算的对象是指定的一种数据类型,计算的结果是该数据类型占用的字节数目。如:

    sizeof(char) = 1;也就是说char类型占用1个字节。

    sizeof(int)  =  4;也就是说int类型占用4个字节。

    4.5.1 sizeof 例程

    下面我们来完成一个实例。这个例子使用sizeof将我们已学的所有数据类型的名称,占用字节数列出。

     

    首先,新建一个控制台工程(详细图解请见: 第2章第3节 DOS 版 Hello World )

    步骤:

    1、选择 主菜单 File | New;

    2、New Items 对话框,选 New 页中的 Console Wizard,然后点OK;

    3、Console Wizard 对话框,Source Type中选中 C++ ,右边的分组中只选中 Console Application 。点 OK

     

    完成以上步骤后,代码编辑窗口自动新建并打开Unit1.cpp,其代码如下:

    //---------------------------------------------------------------------------

    #pragma hdrstop

    //---------------------------------------------------------------------------

    #pragma argsused

    int main(int argc, char* argv[])

    {       return 0;

    }

    //---------------------------------------------------------------------------

    请保存整个工程,包括工程文件名(Project1.bpr)和一个CPP文件(Unit1.cpp),请参见第二章。不过为了工程名字有点意义,我决定将它另存为SizeOf.bpr。

    按F9,编译并运行这个空白工程,会发现一人DOS窗口一闪而过,这我们在第二章就知道了。

    请添加以下代码中的粗体部分:

    //---------------------------------------------------------------------------

    #include <iostream.h>

    #pragma hdrstop

    //---------------------------------------------------------------------------

    #pragma argsused

    int main(int argc, char* argv[])

    {       getchar();       return 0;

    }

    //---------------------------------------------------------------------------

    在第二章中我们的加过类似的代码,目的一样:让程序执行以后不是自动结束,而是在我们敲一个回车键后,才结束,因为我们需要查看程序的执行结果。以后我们所有使用控制台形式的程序,都将需要这两行代码,不过以后不会特别指出了。如你还是有些模糊这两话的作用,最好的办法是现在再按一次F9键,运行这个程序。

     

    下面开始我们的 sizeof 用法初试。

    我们这程序目标是输出所有我们已学的数据类型:整数(含unsigned,short的修饰等),实型(含各精度),字符,bool等数据类型占用的字节数。但我们事实上还没有学过C/C++的任何语法,所以我想我们还是先来一个就一句话的,确保成功以后,再完成所有的语句。

    请添加以下代码中的粗体部分:

    为了省定版面,我只抄出需要变化的main那一部分,之前的代码由于不再需要变化,就不抄到这里了,省略号只用来示意前面还有代码,你别把……也输入代码中啊!

    ……

    int main(int argc, char* argv[])

    {       cout << "Size of char is : " << sizeof(char) << endl;       getchar();       return 0;

    }

    //---------------------------------------------------------------------------

    这次输入的是这一行:

    cout << "Size of char is : " << sizeof(char) << endl;

    这是一行标准的C++ 语句。cout 在 C++里表示“标准输出设置”。曾经是每个学习C++的人必学的内容。在Windows的编程里,它已是昨日黄花,我想诸位就不用在花什么时间去学习它了,只要简单地弄明白它的基本用法就是。

    cout 和之后的 << 合用。 后者是两小于号,你可别老眼昏眼看作是中文的书名号《 。<< 在C++里属于操作符重载,我们以后在学习时,还会在不同的场合里遇到见和它的另一位老兄:>> 。理解并且迅速记下 << 的作用是看它的箭头方向:

    << 的指向左边,它的意思是把它右边的东西给,或者是接到右边。现在,它的左边是cout,cout这里就是屏幕。给屏幕东西,专业的说法就是:输出到屏幕。

    图示为:将 "Size of char is : " 输出到屏幕,当然,一对双引号是不会被输出的,因为它们用来表示这是一句话。

    cout 不仅可以输出一句话(字符串),而且可以用来输出各种C/C++基本类型的数据。并且,通过 <<,它可以一个接一个地输出所需内容。在上面的那行代码中,它首先输出:"Size of char is : ";然后是输出 sizeof(char)的计算结果。最后输出 endl。 endl 表示换一新行(回车换行)。

     理解了 cout 部分,那一行代码中我们惟一不明白就是行末的那个分号了。是啊你看到了没,所有C/C++语句行都在语句后有一个';'。当然,和其它C++语句的主要组成部分一样,它必须是英文符号。如果你打入一个中文的符号。现在改还来得及。并且从此刻起就记住了,所有C++语句中用到标点符号,除非是指定就要用中文作为输出等参数,否则,分号,逗号,冒号,感叹号,问号等等,全都必须是英文的。

    现在,你可以把放心地把那句话原样照敲入你的代码中了。不过,聪明的学员已经完成“Ctrl + C"/"Ctrl + V"大法,直接粘贴了。不过,我想,如果你真的以前还没写过C/C++代码,还是动手输入。

     

    按F9编译,运行。结果如图:

     

    "Size of char is : 1 "中,最后的那个1就是 sizeof(char)的计算结果。

    至于那个endl呢?你看,光标不是在下一行的行首闪烁吗?如果你把代码改成这样:

    cout << "Size of char is : " << sizeof(char);

    那么,输出结果几乎一模一样,除了光标改成在行末。 我们之所以需要换行,是因为后面还要输出。

     

    你可能喜欢用中文来输出?好吧。

    cout << "char(字符)占用的字节数: " << sizeof(char) << endl;   结果是:

    我默认不采用中文的原因只是因为学生容易在切换中英输入法的关节出错,结果在不该使用中文的时候输入了一些中文字符,造成无谓的错误,白白浪费学习时间。

     

    再接再厉,我们输出所有语句。包含我们用typedef自定义了数据类型的别名。

    ……

    int main(int argc, char* argv[])

    {

       typedef int AGE;  //为int 取一个别名

     

       //cout << "char(字符)占用的字节数: " << sizeof(char) << endl;

       cout << "Size of char is : " << sizeof(char) << endl;

       cout << "Size of unsigned char is : " << sizeof(unsigned char) << endl;

     

       cout << "Size of short int is : " << sizeof(short int) << endl;

       cout << "Size of unsigned short int is : " << sizeof(unsigned short int) << endl;

       cout << "Size of int is : " << sizeof(int) << endl;

       cout << "Size of unsigned int is : " << sizeof(unsigned int) << endl;

       cout << "Size of long int is : " << sizeof(long int) << endl;

       cout << "Size of unsigned long int is : " << sizeof(unsigned long int) << endl;

       cout << "Size of AGE is : " << sizeof(AGE) << endl;

       cout << "Size of float is : " << sizeof(float) << endl;

       cout << "Size of double is : " << sizeof(double) << endl;

       cout << "Size of long double is : " << sizeof(long double) << endl;

       cout << "Size of bool is : " << sizeof(bool) << endl;

     

       getchar();

     

       return 0;

    }

    为了看着清楚,我加了一些空行。

    我很乐意承认,这回我也当了一次聪明人。写完成上面的代码过程中,一直在用“Ctrl + C”和“Ctrl + V”。关键是复制完之后要及时改变需要变的地方。

    另外,检查是否改错的一个方法就是利用CBC的代码窗口对关键字变色的特征。sizeof 本身和 sizeof()括号中的数据类型关键字都会变色。如果你发现有一处不是这样,那你一定是输入错了。比如你把sizeof(char)写成 sizeof(cahr)。那么,cahr不会变色。

    我们漏了一个类型:void。void 是无类型。sizeof无法对无类型取其字节数。这是void的特殊性。当作为“无类型”意义时,它字大小是0字节,如函数的返回值。当作为“未确定”的意义时,它的大小也是未确定的。当然,这也是sizeof的一知识点:它的计算对像必须确定的类型。

     

    确保输入无误。F9。结果如下:

    展开全文
  • 一、数据类型 概念:一个值集合和定义在这个值集上一组操作的的总称。 (一个值集合怎么理解呢,比如在C语言中,...通过数据类型(逻辑、数值、字符等)及数据长度来描述。数据项用来描述实体某种属性...
  • //数据结构基本概念 ...数据是一个抽象的概念,将其进行分类后得到程序设计语言中的类型。如:int,float,char等等 数据项:一个数据元素由若干数据项组成 数据元素:组成数据对象的基本单位 数据对...
  • 1、基本概念和术语数据:是对客观事物符号表示。数据元素:数据的基本单位,一个数据元素可由若干个数据项组成,数据项是数据的不可分割最小单位数据对象:性质相同的数据元素集合是数据的一个子集数据...
  • 数据结构三要素4.1 逻辑结构4.1.1 集合4.1.2 线性结构4.1.2 树形结构4.1.4 图结构4.2 数据的物理结构(存储结构)4.2.1 顺序存储4.2.2 链式存储4.2.3 索引存储4.2.4 散列存储4.2.5 顺序存储总结4.3 数据的运算5....
  • JavaScript的数据类型

    2021-03-10 16:28:33
    数据类型的概念 数据类型即这条数据数据属哪个类型?而这些类型在编程语言中往往指的是:数字类型,字符串类型,布尔类型或对象等,当然不止这么简单,但我们可以这么简单的去理解! JS的数据类型一共有8中: 其中...
  • MongoDB基本概念数据类型

    千次阅读 2017-04-14 16:49:03
    二 MongoDB基本概念数据类型 1. 文档 2. 集合 3. 数据库 4. 数据类型 三 常用操作 1.创建数据库 2.删除数据库 3.插入文档 4.更新文档 5.查询文档 四 常用条件操作符 五 常用操作符 六 Limit与Skip 七 ...
  • 数据结构、数据类型和抽象数据类型,这三个术语在字面上既不同又相近,反映出它们在含义上既有区别又有联系。 数据结构是在整个计算机科学与技术领域上广泛被使用术语。它用来反映一个数据内部构成,即一个数据...
  • M对于字符串类型的话指的是指的就是字符串的类型,对于二进制类型指的是字节长度,最大长度的决定因素有很多,可能是row size的限制,那么这个M是一种约束么 这么看吧,官方文档里有L和M两个参数,你会发现在Storage...
  • Redis的数据类型和抽象概念的介绍

    千次阅读 2015-05-01 13:36:29
    Redis不是一个简单的键值存储,事实上它是一个数据结构服务器,支持不同类型的值。这意味着在Redis中值并不限于一个简单的string,而是可以支持更复杂的数据结构,不像在传统的键值存储中,你只能关联一个String键到...
  • 数据挖掘中基本概念--数据类型的属性与度量 讨论一些与数据相关的问题,它们对于数据挖掘的成败至关重要。
  • 数据结构基础概念

    万次阅读 多人点赞 2017-11-14 13:44:24
    数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应运算,而且确保经过这些运算后所得到新结构仍然是原来结构类型数据:所有能被输入到计算机中,且能被计算机处理...
  • 1.学习和掌握用户定义数据类型的概念、创建及使用方法。 2.学习和掌握用户定义函数的概念、创建及使用方法。 创建一个数据库,执行shiyan15.sql脚本 一、创建和使用用户定义的函数(此部分内容涉及的数据表包括...
  • Kotlin变量和数据类型

    千次阅读 2017-12-28 10:23:08
    为了方便新手阅读,在这里我们简单介绍下变量和基本数据类型的概念,老司机跳过即可。 首先我们先来搞清楚一件事就是我们编写的程序实际上都是在处理数据。不管是视频,图片,还是文字,数字等,都是数据,只不过...
  • SQL:2016标准概念数据类型

    千次阅读 2018-04-10 17:26:54
    基本信息 ...本文介绍ISO/IEC 9075:2016中对SQL数据类型的规范描述。 基本信息 每个数据值都属于某种数据类型。 数据类型分为预定义类型、构造类型和自定义类型。每个数据类型都有一个名称。...
  • 尤其是严大妈在《数据结构》中开篇讲述的数据结构、数据类型与抽象数据类型的概念,让博主完美地将这三个概念混淆了很久(这里没有黑严大妈的意思……但是数据结构确实给当时没有认真听课的博主留下了深刻的印象)。
  • 枚举数据类型本节并不讲解,在之后的课程中将会详细讲解有关枚举数据类型的概念及使用。 2.1 了解基本数据类型的概念 基本数据类型指不可再分解的类型。想必各位读者觉得这句定义还是依如常规的生涩难懂。 为什么说
  • 基本概念及其抽象数据类型

    千次阅读 2017-11-28 10:55:44
    内容是数据结构(java)第四版 中国工信出版集团部分笔记 图是由顶点集合以及顶点之间关系集合组成一种数据结构。 无向图中边没有方向,每条边用顶点间无序对表示(vi,vj)。 有向图边有方向,...
  • JavaScript基本数据类型

    千次阅读 多人点赞 2020-07-11 16:48:36
    **数据类型的概念 在编程过程中,数据类型是重要的概念。 为了能够操作变量,了解数据类型是很重要的。 如果没有数据类型,计算机就无法安全地解决这些问题。 接下来我们介绍一下JavaScript的五大基本数据类型: 1....
  • JavaScript的数据类型以及数据类型的转换基本数据类型字符串型数据数值型数据复合数据类型对象的概念日期对象全局对象数学对象字符串对象数组其他数据类型函数空值不确定型数据类型的转换隐式转换显示转换功能快捷键...
  • 从基本数据类型到抽象数据类型

    千次阅读 2018-07-03 14:49:40
    在冯 · 诺依曼体系结构中,程序代码和数据都是以二进制存储的,因此,对计算机系统和硬件本身而言,数据类型的概念其实是不存在的。机器指令和汇编语言中,数据对象是用二进制数表示的,内存里存的都是二进制,对于...
  • JavaScript基本概念之变量与数据类型

    千次阅读 2016-09-30 16:44:15
    名字空间的概念 局部作用域 常量 数据类型 基本数据类型 Undefined类型 Null类型 Number类型 Number类型的NaN 字符串类型 引用类型 Object类型 Array类型 Date类型 RegExp类型 Function类型 基本包装类型变量变量...
  • C语言 -- 数据类型的本质和提高学习

    千次阅读 2019-03-17 22:40:41
    一、数据类型的概念 类型是对数据的抽象 类型是相同的数据有相同的表示形式、存储格式以及相关的操作 程序中使用的数据必定属于某一种数据类型 1、算术类型: 包括三种类型:整数类型、浮点类型,枚举型。 ...
  • MaxCompute基本概念数据类型

    千次阅读 2020-04-17 11:17:36
    MaxCompute基本概念 MaxCompute的核心概念主要包括:项目、表、分区、生命周期...项目(Project)是MaxCompute的基本组织单元,它类似于传统数据库的Database或Schema的概念,是进行多用户隔离和访问控制的主要边界...
  •  根据可变数据类型与不可变数据类型的概念,只需要在改变value值的同时,使用id()函数查看变量id值是否变化就可以知道这种数据类型是可变的还是不可变的了。  数字:,从图中可以看出当数字...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,292
精华内容 18,916
关键字:

数据类型的概念