2.c语言数据类型

c语言数据类型如图:

image 图中的单位为byte(字节),1 byte = 8 bit.

  • 整形数据的存储都是以补码的形式存储的

  • 对于负数,进行以下的转换:

如数-254,在存储该数时:

  • 先对其取绝对值
  • 在转换成二进制
  • 对二进制数取反加一即可。
  • 对于浮点数的存储,采用诸如下面的存储方式:
3.14 = 0.314 * 10^{-1}\\精度
  • 不同类型数据之间转换

    一般在数据转换过程中会出现数据丢失的情况,并且不存在四舍五入的情况

(1)隐式转换

比如:

int i;  //(int 32bit 4byte)
float f;  //(float 32bit 4byte)
double d;  //(double 64bit 8byte)
char ch;  //(char 8bit 1byte)

进行如(i + ch)- (d + f)时,运算结果会取占用字节数最多的数。
上式等于int - double = double,最终的结果转化成double类型。这就是隐式转换。

(2)显示转换(——>强制类型转换)

  • 特殊类型

(1)bool类型(逻辑值——真或假)

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
    
int main()
{
    bool a = false;
    printf("a = %d\n",a);
        
    exit(0);
    }

上面代码输出值为0,bool类型在输出值时只有01

(2)float类型(表示一个范围)

float类型只是表示精度,一个范围,无法定义其与某一个数精确相等
比如

 1/3*3=3

但在计算机计算时,这种情况不存在

1/3*3=0.3333\.{3}*3=0.9999\.{9}

若表示两者相等,则需要规定误差范围。示例代码,float类型的数与整形数相等:

#include <stdio.h>
#include <stdlib.h>
int func(float f)
{
   //if(f == 1)  // or f == 1 这种情况不存在的
   //改写为:
   if(fabs(f-1) <= 1e-6)
   return 1;
}

(3)char是否有符号(不知道

(4)不同形式的0

  • 0
  • '0'(字符)
  • \0 (NULL)
  • "0"(字符串)

(5)数据类型与后续代码中使用的输入与输出相匹配(禁止出现前后矛盾)

posted @ 2023-06-29 17:04  假行僧me  阅读(3)  评论(0编辑  收藏  举报