第六课 C语言基本数据

前言:

      计算机最小的计量单位是字节,一个字节等于八位。比如int型数据有四个字节,它就有32位。根据这些数据可以算出很多东西,比如数据范围。

    计算机只认识二进制,也就是0和1,所以八位最高是2^8-1=255.

   C语言:是高级语言中的一种,是面向过程语言。(强语言)

    详细解释以short类型为例

    程序=算法+数据  
1、数据:基本数据类型(整型,字符整型,浮点型)
   常量:不可改变的量

   变量:可以改变的量

(1)整形数据。

    定义一个整形数据的方式一般为:(有无符号) 类型名 数据名

    平常我们看见int a是一种省略方式,真实的定义为 unsigned int a;

    整形数据分为长整型long(int),短整型short(int),和一般的int,根据有无符号可分为有符号signed,无符号unsigned。

        有人认为这个再简单不过了,可是对于初学者,即使这么简单的问题也会有问题。

         ps:学习需要一颗谦虚的心。当然自大也不一定是错的,有些人能自大是因为他有了自大的能力。可是对于学习者来说,自大绝不能取,只要是学习者,就不能有一颗膨胀自大的心。

        ps:sizeof(),这是一个计算数据储存大小的运算符,强调一下,sizeof是计算符,不是一个函数。

        short占两个字节,int占四个字节,long占8个字节(在64位系统中占8个,32位系统是4个)。

        short类型有两个字节,16位,存储方式如图

        — — — — — — — — — — — — — — — —

        这16位都只能从01中选择,计算机只能储存二进制。左边是高位,右边为低位

(a)数据范围

    以short为例,short占两个字节,也就是它有2*8=16位,按照道理来讲,它的范围应该是(0-2^16-1),2^16-1=65535.

    

在这个程序中,我给short类型a赋值65535,最后它却输出了-1,这是为什么呢?

首先,声明的short实际上是signed short,它表示这个数据是有正负之分的。

正负的差别体现在第一位,开头为1就是负数,为0就是正数,下面详细解释

因此,short类型的储存范围应该为(-2^15~2^15-1)。

(b)计算机储存数据的方式

    在前言中,我说过了,计算机只认识0和1两个数字,所有的数据都以二进制储存在计算机中。且以补码的方式储存。

以此为例:

65535的原码为:    11111111 1111111 两个字节,一个字节有八位

               反码 :   00000000 00000000 一变为0,0变为一

                补码:   00000000 00000001 反码加一为补码

       -1的原码为:   10000000 00000001

             反码为:    11111111 11111110

             补码为:    11111111 11111111

可以看出-1的补码和65535的原码一致。所以最后输出了-1.

(c)unsigned与signed

    unsigned表示无符号,对于short类型来讲,无符号类型的储存空间就是(0~2^16-1)也就是【0,65535】,因为无符号没有负数。

    signed表示有符号,平时我们不会直接声明,而是默认有符号,它的第一位不是用来储存数据的,而是用来标识正负,第一位为1,这个数就是负数。第一位为0,这个数就是正数。

    比如-3,用二进制表示就是:10000000 00000011

           3,用二进制表示就是:00000000 00000011

补充:unsigned short a=-1

    printf("a=%d\n",a);

这个时候,a应该等于多少呢?

答案是65535

(e)溢出

     由于unsigned short 的范围是【0-65535】,如果超出这个范围就会溢出,就像杯子装水一样,装满了就不能继续装了。


就像这样一样,原因很简单,65535转化为二进制是1111111111111111(16 个一),加了一个1,变成了17位,也就是100000000000000000,但是short只有两个字节,取后16位,也就是16个零。

(f)对于其他的整形数据(int 和long,unsigned int,unsigned long),上述规律都是一致的。

感想:写得好痛苦,不知道写得够不够详细。前面不够详细的我还会继续补充,如果有人看,也可以给我提意见,我会根据情况改正的。

(2)浮点型。

浮点型分为单精度的float型和双精度的double型

声明方式为 【有无符号】 变量类型 变量名   

一般情况下会省略有无符号

它和整形的区别在于,整形只输出整数,而浮点型可以输出小数。这也是C语言的特点之一,强语言体现在这里。


float所占字节为4,double所占字节为8

他们可以输出小数,一般来讲是7位小数。



    在这个例子中,对于float,我们发现它的输出和输入有一些差别。这时因为使用VC++6.0,对于float整数部分和小数部分加起来输出7位。

          浮点型的范围不做过多的解释,和short是一样的规律。

(3)字符型

字符型分为普通字符和转义字符。

普通字符有‘a’‘b’‘c’。。。。。。‘@’‘!’’&‘等等,这些都是普通字符,在键盘还是哪个都可以找到对应的。

转义字符,就是\和其他普通字符结合在一起使用。比如‘\n’'\t'等等。比如\n代表转行,\t代表tab

声明方式为 char 变量名

单个的字符要用‘’,字符串用“”。


输出字符用%c,可以看出字符型只占1个字节

(a)ASCII码

    由于计算机只能储存二进制,所以我们所说的这些字符肯定不能直接存储在计算机中。

    所以计算机才去映射的方式储存字符。

    用一串一串的二进制来代替字符,这种对应方式叫做ASCII表。如图

二进制可以转化为十进制,字符对应着二进制,所以也对应着十进制,字符型实质上也是整形,可以相互转化。

例如        


字符型的‘a’转化为了97,数字97转化为字符‘a’

2.类型转化

   (1) 不同类型之间的数据,混合在一起使用的时候,会发生转化。

    一般来讲是这样

  char---->int----->float/double

    (2)强制类型转化

   一般格式为:(类型名)(表达式)

比如将一个整形数据a转化为double类型。:(double)(a)

注意:表达式的括号是必不可少的,比如有两个整形数据x与y,转化为整形。

(double)x+y 这个只将x转化为double,然后与未转化的y相加

(double)(x+y)这个就是将x+y的和转化为double
















猜你喜欢

转载自blog.csdn.net/weixin_42581560/article/details/80961861
今日推荐