02-数据类型/常量/变量/运算符

ICER's BLOG / 2023-05-14 / 原文

1.数据类型

1.1 数据类型分类

  • 构造类型--用户自定义的数据类型
  • 存储负数使用有符号数
  • 字符型也分为有符号数和无符号数
#include <stdio.h>

int main()
{

}

1.2基本数据类型

bool类型

  • bool不是基本数据类型,使用的时候需要加入头文件
#include <stdbool.h>
#include <stdio.h>
#include <stdbool.h>  
int main()
{
  /*
    非0 为真
    0   为假
  */
  bool a;
  
  a = true;
  a = false;
 
  if(a) {
    print("true %d\n",a);
  }esle{
    print("false %d\n",a);
  }
  return 0;
}
#include <stdio.h>
#include <stdbool.h>  
int main()
{
  /*
    非0 为真
    0   为假
  */
  bool a;
  
  a = -1;  // a表示-1,非0为真
 
  if(a) {
    print("true %d\n",a);  // 结果为true 1
  }esle{
    print("false %d\n",a);
  }

  return 0;
}
  • 代码编译之前有一个预处理的过程,预处理过程会将一些宏进行展开
gcc -e ctype.c -o bool.i  
  • 编译的时候会将<stdbool.h>进行展开,编译文件中的bool被替换为_Bool说明进行了宏替换,这个宏是定义在<sdtbool.h>中的
// 原始的<stdbool.h>文件中,定义了宏,预处理的时候会进行宏替换,和头文件展开
#define bool _Bool
#define true 1
#define false 0

#define _Bool bool
#define bool bool

使用bool类型的两种方式

1.加头文件,使用bool(宏定义的布尔类型),如果想要使用true 1 false 0 要加头文件
2.不加头文件,使用_Bool,_Bool是基本数据类型

char类型

  • char 1个字节 -128-127或者0-255
  • signed char 1字节 -128-127
  • unsigned char 1字节 0-255
  • unsigned char 0000_0000 - 1111_1111 (0-255);255的计算可以看作是先加1,则最大值变为1_0000_0000(2^8 = 256),256-1 = 255
  • 有符号数的最大值,0111_1111(2^7-1 = 127)
  • -127 -- 原码 1111_1111,反码 1000_0000,补码 1000_0001
  • -128 -- 补码在内存中为1000_1000
#include <stdio.h>

int main()
{
  char ch;
  ch = 127;  // -128-127 是可以的
  ch = 65; // 可以打印A
  ch = 128; // 正数128赋值给ch,ch得到的补码是1000_000,char类型存储-1
  ch = 129; // 129的补码是1000_0001,char类型中127的补码也是1000_0001,所以存储127 
  
  unsigned char b;
  b = -1;  //b给的原码是1000_0001 反码 1111_1110 补码1111_1111  
           // b的补码对应unsigned char的存储值是255
  printf("ch=%d\n,%c\n",ch,ch);
  return 0;
}

整型

  • short -- 2个字节和int -- 4字节--长度不同
  • sizeof(类型) -- 查看数据类型占几个字节
  • short -32768-32767
  • unsigned short 0-65535
#include<limits.h>  -- 这个头文件中有数据类型数据最大最小值的宏定义

2.常量

2.1 基本数据类型常量

常量是指在程序运行期间数值不发生变化的数据,整型常量通常简称为整数

整型常量

整数可以是十进制数\8进制数\十六进制数

// 3365
06434 -- 8进制数
0xdlc -- 十六进制数

浮点型数据

浮点型常量又称为实数,一般含有小数部分;在c语言中,实数只有十进制的实数,分为单精度和双精度;实数有两种表示方法,即一般形式和指数形式

3.24 
3.14 
-12.5

指数形式

  • 通常表示特别大的数或者特别小的数
  • e/E表示指数
1.176e+10
-3.5789e-8
#include <stdio.h>
int main()
{
  int a = 0x12345678;
  float b = 2.3e+10;
  printf("%d %x %o\n",a,a,a);
  printf("%e,%f\n",b,b);
  
  return 0;
}

字符型常量

字符常量指一个单一字符,其表示形式是由两个单引号包括的一个字符

'a'
'A'
'?'
'$'
'0'

在c语言中,字符常量具有数值,字符常量的值就是其对应的ASCII码制,可以将字符常量看作是一个字节的整数

a = 'F'; // 将70给a   A -65  F是70
b = 'A'+2; // b中存储的是C字符
u = 'B'+' '; // 66+32 = 98 --b -- 大小写字母转换

2.2 标识常量