day2-数据类型 运算符 与 表达式

数据类型:数据的类型

数据有常量与变量之分,它们分别属于以上这些类型。

常量:程序运行过程中,其值不能被改变的量称为常量。

变量:在程序运行过程中 ,值可以变的 。 
    变量能变的原因:是个存储数据的内存空间

定义变量 --- 开辟了一块空间 

 int a = 10;  //定义变量 
                 //同时 给了一个值 
               //初始化 
  int a; 
  a = 10; //赋值 
  
 
         +---------+
         |         | 0x1000
         +---------+ 
         |         | 0x1001//以字节 进行编号 ---地址  --编址
         +---------+ 
         |         | 0x1002//以字节 进行编号 ---地址  --编址
         +---------+ 
         |         | 0x1003 //以字节 进行编号 ---地址  --编址
         +---------+ 
         |         | 0x1004//以字节 进行编号 ---地址  --编址
         +---------+ 
         |         | 0x1005//以字节 进行编号 ---地址  --编址
         +---------+ 
         
         
a. 数据类型大小 
b. 10怎么放的?
   字节序问题:
   大端模式
   小端模式: 高高低低 
            高位数据 高地址处 (编号大的)
            低位数据 低地址处             
   
   
   int a = 0x12345678;  //4个字节 
   
         +---------+ 大端存储 
         | 0x12    | 0x1000
         +---------+ 
         |  0x34   | 0x1001//以字节 进行编号 ---地址  --编址
         +---------+ 
         |  0x56   | 0x1002//以字节 进行编号 ---地址  --编址
         +---------+ 
         |  0x78   | 0x1003 //以字节 进行编号 ---地址  --编址
         +---------+ 
         |         | 0x1004//以字节 进行编号 ---地址  --编址
         +---------+ 
         |         | 0x1005//以字节 进行编号 ---地址  --编址
         +---------+ 
         
         
         
         +---------+  小端存储 
         | 0x78    | 0x1000
         +---------+ 
         |  0x56   | 0x1001   //以字节 进行编号 ---地址  --编址
         +---------+ 
         |  0x34   | 0x1002  //以字节 进行编号 ---地址  --编址
         +---------+ 
         |  0x12   | 0x1003  //以字节 进行编号 ---地址  --编址
         +---------+ 
         |         | 0x1004     //以字节 进行编号 ---地址  --编址
         +---------+ 
         |         | 0x1005     //以字节 进行编号 ---地址  --编址
         +---------+ 

进制问题

十进制:
   0  1  2  3  4  5  6  7  8  9
  10 11 12 13 14 15 16 17 18 19
  20 .... 
  
   八进制:
   0  1  2  3  4  5  6  7
  10 11 12 13 14 15 16 17 
  20 .... 
  
  十六进制:
   0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
  10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
  20 .... 
  
   二进制:
   0  1
  10 11


   十进制 转 二进制 
   
   eg:
      123 
      
      短除法 /除二取余法      
      百 十 个
      1  2  3  = > 1 * 10^2 + 2*10^1 + 3 * 10 ^ 0 
      
     2|123
      -----
      2|61  ... 1            ---低位 
       ---
       2|30 ... 1
        --- 
        2|15 ... 0 
         ---
         2|7 ... 1 
          --
          2|3 ... 1
           --
           2|1 ... 1       ---二进制 高位 
            --
             0 .... 1 
             
             0111 1011
             
             0111 1011  //二进制转十进制 --- 加权求和 
    
    
    
总结:
   十进制 转换 n进制:  除n取余法 
   n进制 转 十进制  : 加权求和
   
   八进制 转二进制 : 
   1 个八进制数 对应 3位二进制数
   01 111 011
    1  7  3   //八进制 
    
   十六进制 二进制 :
    1 个十六进制数 对应 4位二进制数     
    //
    二进制权重:8421
    0111 1011(二进制)
     7    B         (十六进制)

c语言:
 int             4字节      
 short           2字节
 long            8字节  //64位平台 
 long long       8字节 

注:一个字节(1byte)对应八位(8bit)
 
 unsigned / signed  
 unsigned //无符号 --非负数 
 signed   //有符号 --负数 
 
 unsigned short

 0000 0000 | 0000 0000  //统统都是数值位 
 signed short
 0|000 0000 | 0000 0000  
                         //最高位为 符号位 
                         //其余 是数值位 
 unsigned short
 0000 0000 | 0000 0000  //统统都是数值位    0 
 
 1111 1111 | 1111 1111  //最大数值 
10000 0000   0000 0000      2^16 - 1 = 65536-1 //65535 
 
unsigned short范围 [0,65535]
 
 signed short 
 0|000 0000 | 0000 0000  //最小正值     0 
 0|111 1111 | 1111 1111  //最大正值     2^15 - 1  = 32767
 1|000 0000 | 0000 0000  //补码 
 1|111 1111 | 1111 1111  //补码的 反码
 1|000 0000 | 0000 0000  //原码 负的0  -2^15  = - 32768
 
 1|111 1111 | 1111 1111 //补码
 1|000 0000   0000 0000 //补码的 反码 
 1|000 0000   0000 0001 //原码 -1 
 
 
signed short 范围: [-2^15 ~ 2^15-1]
 -32768   32767 
 
 
 unsigned int
   
  0000 0000 | 0000 0000 |  0000 0000 | 0000 0000 //最小值 0 
  1111 1111 | 1111 1111 |  1111 1111 | 1111 1111 //2^32 - 1 

整型类型:
  常量形式 
  123  --十进制 
  0123 --八进制 
  0x123 --十六进制
  注:计算机中存储的都是 补码 
  正数:原 反 补 码都一样的 

  注:补码的补码是源码

       对于有符号数据类型操作时,取反码时,符号位不取反。

      负数补码: 反码 + 1 = 补码

eg:

  负数
 -123 
  原码 

//short 
  1|000 0000 0111 1011 //负数的原码 
  1|111 1111 1000 0100 //负数的反码
  1|111 1111 1000 0101 //负数的补码 ---计算机中 
  -----
   F     F    8    5 //十六进制表示
   1|111 1111 1000 0101  //负数的补码

练习:
   -6735   //int 型 
   
   printf("%#x\n",a);

手动计算:

-6735  
   
     1|000 0000 0000 0000 0001 1010 0100 1111 //原码 
     1|111 1111 1111 1111 1110 0101 1011 0000 //反码
     1|111 1111 1111 1111 1110 0101 1011 0001 //补码       
       F    F    F    F    E    5    B    1                  

 整型数据的溢出:

65535 ----
     1111 1111 | 1111 1111 |  1111 1111 | 1111 1111 //放到计算机 
                          ---
                           |
                           %d //以有符号的十进制形式输出 
                           |
                           V
                           
                           
    1|111 1111 | 1111 1111 |  1111 1111 | 1111 1111
                         -----
                          求补码 
    1|000 0000 | 0000 0000 |  0000 0000 | 0000 0001 // -1
    
              0    65535   
       xxx                    65534                  
   xxx                          65533                             
           ...                   ...       
                  32768

总结:
1.整型 
  常量形式 
    123
    0123
    0x123 
  变量定义 
   语法:
   数据类型 变量名;
   
   初始化  
    int a = 10;   
   赋值   
    int a;
    a = 10;
   
2.整型大小 
3.整型数据存储 
  字节序 
  整型数据本身的存放规则 --- 补码 
  正数 --原码 反码 补码 一样 
  负数 --反码 + 1
4.整型问题 
  整型溢出 
  

浮点型:

1.浮点常量 
  1.234
  1.23e4   //科学计数法形式 
  -1.23e-4 //-1.23 * 10^-4 
  1.23e4.3 
2.浮点变量 

  float     4   
  double    8 
  
3.大小 
  
  float     4   
  double    8 
   
4.浮点数的存储 
 
  
  -9.25 

  首先,
  step1.十进制的小数 转换为 二进制形式的小数 
      整数部分 
         9 ---  1001 //二进制整数部分
      小数部分 
         0.25 
          乘二取整法 
          0.25 * 2 = 0.5 --- 0 
          0.5  * 2 = 1.0 --- 1
          0.01         //二进制小数部分
  
      综合:1001.01 //二进制形式的小数
      
 step2.将二进制形式的小数写成二进制科学计数法形式 
      
      即 1.00101*2^3 

     eg:十进制科学计数法形式123.45 --> 1.2345 * 10 ^ 2     
     
 step3.按照  IEEE 754 标准 存放       

       float 32位 
      符号位| 指数位 |尾数位 
       1   |   8   | 23
       
       1   | 3+127 |        //127为偏置
       1   |1000 0010|00101 
           |-127~128|
       
           1111 1111 //255 
  
      1100 0001 0001 0100 0000 0000 0000 0000 //二进制形式

注:不够的尾数位用0补位
       C     1   1    4    0    0    0    0 //十六进制形式
      
      double  8个字节 
       符号位| 指数位  |尾数位 
       1    |   11   |52

练习:
    -6.125 
   float f = -6.125;
   printf("%#x\n",f);
   
  step1:
   0110.001 

step2:
   1.10001 * 2 ^ 2 
   
   0.125 * 2 = 0.25 --- 0
   0.25 * 2  = 0.5  --- 0
   0.5 * 2   = 1.0  --- 1
   
   step3:
   1100 0000 1100 0100 0000 0000 0000 0000 
   c    0     c    4    0    0    0   0 
   变量名命名规则及注意事项:
   1.数字,字母,下划线组成 
   2.不能以数字开头
   3.区分大小写 
   4.不能与关键词重名 
   5.不要与二级关键词重名  //include 
   6.不要与库函数重名    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值