C语言 数据类型

数据类型

1.基本类型

char、short int、int、long int、float、double

扩展:常量和变量

常量:在程序运行过程中不可改变的量

变量:其值可以改变的量成为变量

  • 整型: 100、125、-100、0
  • 实型:3.14、0.125f、-3.789
  • 字符型:‘a’、‘b’、‘c’
  • 字符串:“a” 、“abc”、“123”
字符数据
  • 字符常量:

    直接变量:用单引号括起来,如 ‘a’、‘b’、'0’等.

    转义字符:以反斜杠 “\” ,后跟一个或几个字符、如’\n’ , '\t’等,分别代表换行,横向跳格

  • 字符变量:

    用char定义,每个字符变量被分配到一个字节的内存空间

    字符值以ASCII码的形式存放在变量的内存单元中;

    注:

    char a;
    a = 'x';
    printf("%c 的ASCII码对应 %d",a,a); // %c 是打印字符 %d 打印数字
    // a变量中存放的是字符'x'的ASCII:120
    // 即 a = 120 跟 a = 'x'在本质上是一致的.
    
  • 字符串常量

    是由双引号括起来的字符序号,如"China"、"哈哈哈"等都是合法的字符串常量。

  • 字符串常量与字符串变量的不同

    'a’为字符常量,“a” 为字符串常量

    每个字符串的结尾,编译器会自动的添加一个结束标志位’\0‘,即“a”包括两个字符’a’ 和 ‘\0’

整数类型
  • 整型常量:(按进制分):

    十进制:以正常数字1~9 开头, 如 457 789

    八进制:以数字 0 开头 , 如 0123

    十六进制:以 0x 开头, 如0x1e

    ​ a = 10,b = 11,c = 12,d = 13,e = 14,f = 15

  • 整数变量:

    • 有/无符号短整数(un/signed)short(int) 2个字节
    • 有/无符号基本整型(un/signed) int 4个字节
    • 有/无符号长整数(un/signed) long(int) 4个字节 (32位处理器)
实型数据(浮点型)
  • 实型常量

    • 实型常量也称为实数或者浮点数

    十进制形式:由数字和小数点组成 0.0、 0.12、 5.0

    指数形式:123e代表123 * 10的三次方

    ​ 123e-3 代表 123 * 10的****三次方

    • 不以f结尾的常量是 double 类型
    • 以 f 结尾的常量(如3.14f)是 float 类型
  • 实型变量

    单精度(float)和双精度(double) 3.1415936753456

    • **float**型:占4个字节,7位有效数字,指数-37 到 38

      3333.333 33

    • **double**型:占8个字节,16位有效数字,指数 -307 到 308

格式化输出
  • %d 十进制有符号整数
  • %u 十进制无符号整数
  • %x 以十六进制表示的整数
  • %o 以八进制表示额整数
  • %f float 型浮点数
  • %lf double 型浮点数
  • %e 指数形式的浮点数
  • %s 字符串
  • %c 单个字符
  • %p 指针的值
char a = 'a';
int b = 110;
float c = 3.14f;
double d = 1.23;
int e = 0x3d;
printf("a = %c\n",a);
printf("b = %d\n", b);
printf("c = %f\n", c);
printf("d = %lf\n", d);
printf("e = %x\n", e);
printf("e = %d\n", e);
特殊应用
  • %3d:要求宽度为3位,如果不足3位,前面空格补齐;如果足够3位,此语句无效
  • %03d:要求宽度为3位,如果不足3位,前面0补齐;足够无效
  • %-3d:要求宽度为3位,如果不足3位,后面空格补齐;足够无效
  • %.2f:小数点后只保留2位
  • %5.2f:前面的5表示总共占5个位置,小数点后2位,如果前面超过了5个位置则无效

2.构造类型

概念:由若干个相同的或不相同类型数据构成的集合,这种数据类型为构造类型 例如: int a[10];

数组、结构体、共用体、枚举

3.类型转换

数据有不同的类型,不同类型数据之间进行混合运算是必然涉及到类型的转换问题

转换类型的方法有两种:

  1. 自动转换

    遵守一定的规则 系统自动完成

  2. 强制类型转换

    把表达式的运算结果强制转换成所需的数据类型

  • 自动转换的原则:
    1. 占用内存字节少(值域小)的类型,向占用字节数多(值域大)的类型转换,以保证精度不降低、
  1. 当表达式中出现了 char、short int 、 int 类型中的一种或多种,没有其他类型了,参加运算的成员全部变成int类型的参加运算,结果也是int类型的

    printf("%d\n", 5/2);
    
  2. 当表达式中出现了带小数点的实数,参加运算的成员全部变成double类型的参加运算,结果也是 double 型。

    printf("%lf\n", 5.0/2);
    
  3. 当表达式中有有符号 也有无符号,参加运算的成员变成无符号数参加运算结果也是无符号数(表达式中无实数)

     #include<stdio.h>
    int main()
    {
    	int a = -8;
    	unsigned int b = 7;
    	printf("a + b = %d\n", a + b); // 这里 %d 当作有符号来计算了 
    	if(a + b > 0)
    	{
    		printf("a + b > 0\n");
    	}
    	else if(a + b < 0)
    	{
    		printf("a + b < 0\n");
    	}
    	else
    	{
    		printf("a + b = 0\n");
    	}
    	return 0;
    }
    
  4. 在赋值语句等号右边的类型自动转换为等号左边的类型

    int a;
    float b = 5.8f;// 后面加f代表5.8 是float类型,不加的话,认为是 double 类型
    a = b;
    printf("a = %d\n",a);
    return 0;
    
  5. 注意自动类型转换都是在运算的过程中进行临时性的转换,并不会影响自动类型转换的变量的值和其类型

强制类型转换
  • 通过类型转换来实现

  • (类型说明符) (表达式)

  • 功能: 把表达式的运算结果强制转换成类型说明符所表示的类型

  • 例如: (float)a; //把a的值转换为实型

  • ​ (int)(x+y); // 把x + y 的结果值转换为整型

  • 注意: 类型说明符**必须加括号**.

  • float x = 0;
    int i = 0;
    x = 3.6f;
    i = (int)x;
    printf("i = %d\n",i);
    printf("x = %f\n",x); 
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值