从零开始的应届求职生活(自勉第二天)

day2  C 数据类型 运算符 和 表达式

一.   C语言的数据类型:整型,浮点型,字符型,构造类型,指针类型,空类型,此处细讲前三种数据类型。

1. 整型常数,主要运用的事十进制,八进制,十六进制的常量形式。在计算机中最终存储的是二进制形式。进位为(满几进几)

2.其中8421BCD码,可快速写出十进制对应的二进制编码和格雷码。

3. 十六进制与二进制互相转化,方法:一位十六进制数对应四位二进制数。

eg:       0    --- 000
    1    --- 001           2    --- 010    3    --- 011
    4    --- 100           5    --- 101    6    --- 110
    7    --- 111           8    ...   a b c d    f   ...  1111 

eg: 7          B

       0111     1011

二:整型变量

1. 起变量名也有规则:

    1. 数字,字母,下划线 
     2. 不能是数字开头 
     3. 字母区分大小写 
     4. 名字 不能与 关键字 重名 
     5. 不要 和 库函数 重名 (eg: include等)
     6. 不要 和 预处理命令等 二级关键字 重名 

2. 数据类型的大小(占用内存空间的字节数)

    sizeof(int) = 4
    sizeof(short) = 2
    sizeof(long) = 8
    sizeof(long long) = 8

我们也可以用代码查看数据类型的大小

int main()
[
   printf("sizeof(float) = %ld\n",sizeof(int));
   return 0;
]

此外通过这种方式也可以查看(int)( short)( long)( long long)的数据类型大小。

3. 整型数据存储:32bit =4*8bit;(4bytes)

有两种方式 :大端和小端,其中小端遵循高位数据存储在高地址处 ,低位数据存储在低地址处的方式,pc端也是小端的一种,另外arm内核芯片默认为小端,也可以设置为大端。

4. 符号类型和无符号类型 signed和unsigned,后接数据类型即可表示相对应的类型

eg:unsigned int   //无符号的 int类型          signed int     //有符号的 int类型

无符号类型 
    0000 0000 0000 0000 0000 0000 0000 0000 //数值位 
    
    有符号类型 
    0 | 000 0000 0000 0000 0000 0000 0000 0000 //数值位

无符号类型无法表示正负,故用有符号类型

其中有符号类型较为特殊 ,最高位充当符号位(0为正数,1为负数),其他位充当数值位

eg:int a = 123;
    0000 0000 0000 0000 0000 0000 0111 1011 //  -- 原码 
    0000 0000 0000 0000 0000 0000 0111 1011 //  -- 反码 
    0000 0000 0000 0000 0000 0000 0111 1011 //   -- 补码 
      0    0    0    0    0   0     7   B 

         int a = -123
    有符号类型 
    1 | 000 0000 0000 0000 0000 0000 0111 1011 //  -- 原码 
    1 | 111 1111 1111 1111 1111 1111 1000 0100 //  -- 反码 --- 符号位不变,其余位按位取反  
    1 | 111 1111 1111 1111 1111 1111 1000 0101 //   -- 补码 --- 符号位不变,反码 + 1  
    1111    1111 1111 1111 1111 1111 1000 0101 
      f             f      f       f        f        f      8       5    

其中负数运算逻辑为模减去负数的绝对值

eg:12 -5 = 12- |-5| = 7

结论:整数存在计算中的都是补码,其中正整数的原码,反码,补码都是一样的,

负整数的补码等于反码+1;

5.  数据的取值范围

eg :0000  0000 0000  无符号类型的最大值为2^12-1,最小值为0;

有符号类型 
    0 | 000 0000 0000 0000 0000 0000 0000 0000 //最小值0
    0 | 111 1111 1111 1111 1111 1111 1111 1111 //最大值 2^31 - 1 
    
    1 | 000 0000 0000 0000 0000 0000 0000 0000 //最小值  -2^31
    1 | 111 1111 1111 1111 1111 1111 1111 1111 //最大值  - 1 

有符号类型的一种情况

eg:1 | 000 0000 0000 0000 0000 0000 0000 0000  //补码 
    1 | 111 1111 1111 1111 1111 1111 1111 1111   // 反码
    1 | 000 0000 0000 0000 0000 0000 0000 0000  // 原码    最小值为-2^31

其中当是有符号类型时候,最高位既充当符号位,有充当数值位 

    unsigned short   [0,2^16-1]  [0~65,535]
    signed short      [-2^15,2^15-1]  [-32,768,32767]

6. ※ 整型溢出

    整型溢出 
    最大值 + 1  //变成 取值范围内 最小值  -- 向上溢出 
    最小值 -1   //变成 取值范围内 最大值 --- 向下溢出 

其中溢出可以想象一个圆,是一个循环,当过终点的同时也从起点出发

三. 

浮点类型:
1.浮点型 常量形式 
  1.234
  1.23e4  //科学计数法形式 
  1.23E4  //1.23 * 10 ^4 
  1.23E-4 //1.23 * 10^-4

2. 关键字 
  float    //单精度浮点类型 
  double   //双精度浮点类型 

3. float f; //定义了一个 float 类型的变量 f 

4.浮点类型的大小 

 float 4字节 
 double 8字节 

其中对于实操代码中,如果float了一个f,就直接printf(“f”)是不一样,虽然能够运行,但是2这个的类型不同,float f的定义f为定义的float类型,但是直接printf默认为double类型,二者并不一样。

5. 浮点数的存储 
  IEEE 754标准 
  
  float f = 6.125;
step1: 将十进制形式的小数 转换为 二进制形式的小数 
        
       整数部分 
              除2取余法 
       小数部分 
              乘2取整法 
            
      0.125 * 2 = 0.25 --- 0
      0.25  * 2 = 0.5  --- 0
      0.5   * 2 = 1.0  --- 1
      
      0.125 二进制形式 0.001 
      
      0110.001 //二进制形式的小数
      
 step2: 将 二进制形式小数 ,写成科学计数法形式      
       123.45 => 1.2345*10^2    
       0110.001 => 1.10001 * 2^2
       
 step3: 按IEEE 754标准进行存储 
 float 占 4字节 
    1      8     23 
 符号位|指数位|尾数位 
    0     2     10001    
        +127
        -127
        +128

      
  0   10000001     10001
  
  0100 0000 1100 0100 0000 0000 0000 0000  //6.125 存到计算机中的形式 
   4    0    c    4    0     0   0    0    

其中代码中有循环存在,判断循环后的浮点类型是否与循环前所给的字符相等,首先确认他是否为无限循环

eg:小数部分距离

0.9  *  2 = 1.8 --- 1
  
  0.8  *  2 = 1.6 --- 1
  0.6  *  2 = 1.2 --- 1
  0.2  *  2 = 0.4 --- 0
  0.4  *  2 = 0.8 --- 0
  
  0.8  *  2 = 1.6 --- 1 
  0.6  *  2 = 1.2 --- 1   

可见,已经出现循环,又由于printf默认为double,所以循环之后的浮点类型与循环之前随给的字符是不一样的。

四. 字符型,

char 类型 从本质上看 实际上也是一种整型

char 类型 --- tiny int

小练习

eg:定义五个char类型变量 分别赋值为 'h','e','l','l','o' 要求, 输出 成 HELLO

#include<stdio.h>

int main()
{
 char ch1 = 'h';
 char ch2 = 'e';
 char ch3 = 'l';
 char ch4 = 'l';
 char ch5 = 'l';
 
printf("%c",ch1 - 32);
printf("%c",ch1 - 32);
printf("%c",ch1 - 32);
printf("%c",ch1 - 32);
printf("%c",ch1 - 32);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值