基本类型

        这个专题不是专门教程,所以里面的内容基本上都是以“实用”和“快速入门”为两个原则而写的。在这个主题中,我会省略或者简单的提一下很多实际项目中很少使用的知识,如果看官有兴趣,可以找本正规的教科书看看。

        先来说说类型。在编程语言中,类型是最重要的了,可以说没有类型,编程那是一件非常费力的事情。这个费力的程度可以和你在过年的时候去搞一张“上海-成都”的火车票相提并论。既然类型那么重要,那么在c中有多少常用类型呢?一般的,我们只要需要知道int,long,long long,char,double,float,这些就可以了。但是你另外还要记住,c中的类型是分为有符号和无符号之分的,什么意思呢?有符号就是指你可以表示正或者负,无符号就只能是0和正了。那么还记得我们上一篇提到了需要一个“内存映像”映射到你的脑子里吗?这个在这里就派上用场了。在计算机中,所有的值都是使用0或者1表示的,这个角bit,或者叫“位”。那么上述这些类型也不例外,主要是他们类型的值都是使用位表示的。一般的char为8位,int为32位,long为32或者64位……这些由编译器决定。那么8位的char表示范围是多少呢?其实换算一下就ok了,8个1,如果是无符号类型,那么就是255,如果有符号,那么就是-127。这个怎么得出来的呢?这个和二进制表示法有关,在二进制表示中,如果值类型为无符号,那么最前面那么1就是数字位,当作数字用;如果值类型为有符号,那么最前面一位就是符号位,0表示正,1表示负。比如有int类型二进制如下:

        无符号:00000001 =  1;

        有符号:00000001 = 1;

        无符号:10000001 = 129;注意这里的最前面的1是数字位;

        有符号:10000001 = -1; 注意这里的最前面的1是符号位;

       对于char和int,他们有部分的取值是相同的,这个也就是意味着,在相同的取值访问内,char和int是可以互相转换的,就像上面的四个二进制数一样,上面的例子中二进制表示的是int类型,如果例子中的二进制表示的是char类型,那么他们就会是另外一个结果,具体的结果请参照(ASCII表)。这个给我们一个提示,就是相同内存表示,因为对象的值类型不同,所以内存表示的意义不同,但是在物理的内存层中,数字是没有意义的,这些意义是由我们的程序上下文给予的。

        写过oo的看客们肯定还记得有一个byte的类型,这个类型在oo中非常的常见,而且经常是使用在网络编程中,byte经常作为数组出现,通过网络的tcp协议传输到另外一台机器。那么在c中,也存在byte,只是这个类型不是c内置的,而是要需要使用的程序员自己定义的,其实byte就是unsigned char,无符号的char类型,同样byte也是8位,取值是0-255.

      讲了那么多的int和char类型,还有两个类型,double和float冷落了。这两个类型都是浮点类型。你简单的理解浮点类型就是指带小数点的值。float只有6位有效数字,表示的精度比较低,double精度比float要高,所以在现实程序中,大多数使用double而不常使用float,除非你的程序对精度要求不高,而且数字大小很夸张,比如超级计算机使用的那种,否则建议还是使用double的好。使用double和float时,特别是使用float时,千万要注意,避免使用这两个类型的值进行比较,因为精度的关系,这些值的比较往往会进行了“四舍五入”以后再进行的比较的,所以使用这两种类型的值比较无法得到唯一的答案,而且一旦使用这种比较,你很难检查出来程序错在哪里,因为程序都运行正常,不会报错,也不会中断等等,就是结果错了。

      对于long或者long long,其实和int类型是差不多的,就是比int类型表示的范围大一点而已,别的基本上和int一样。所以long或者long long基本上都是处理大数据量时才使用,一般常见的情况是在网络程序中,表示传输的char数组长度等等。

    对于bool类型,在c中是没有的,但是在c中一样存在if语句。既然存在判断,那么就一定会存在true和false,否则无法判断对错啊。所以在c中,bool是用int表示的,0表示false,所有的非零值都表示true。这点一定要记住,很多的c程序,特别是一些库程序,最后函数的返回值是0,这个不是代表出错了,恰恰相反,但返回0时代表程序执行成功,返回非零才代表错误,返回的非零值是错误代码。这点逻辑其实是和我们oo思想违背的,我在开始的时候也很搞,慢慢的,使用多了就好了。

     其实在c中,还有一些类型,比如指针,struct,enum,自定义类型等等,这些会在以后的分享中描述,这里先写这些基本类型吧!

原文地址:https://www.cnblogs.com/Seapeak/p/1722302.html