C语言数据类型(数据类别)

一、整型(int:integer)

        

  • 概念:表达整数类型的数据(正整数、负整数、0)
  • 全称:integer
  • 语法:

    

需要注意的地方(其它数据类型也如此):

        (1).int 的本意是 integer,即整数的意思

        (2).int a 代表在内存中开辟一块小区域,称为 a,用来存放整数,a 一般被称为变量。

        (3).变量 a 所占内存大小,在不同的系统中是不一样的,64位系统典型的大小是4个字节。

        (4).变量 a 有固定的大小,因此也有取值范围,典型的范围是:-2147483648到2147483647

1、变量的定义和赋值:

        

2、从内存的角度来看待这个过程(int num = 100)

(1)、整型修饰符

 (2)、符号位

(3)、数据在内存中的编码形式

  • 正数:直接使用原码的二进制来表达,比如a=3,在内存中是 0000 0011
  • 负数:用绝对值取反加一来表达(也就是补码),比如a=-3,在内存中是1111 1101
-3的原码:         1000 0011
-3的绝对值:      0000 0011
-3的反码:          1111 1100
3的补码:           1111 1101
// 注意:负数的补码在取反加1的时候,符号位是不变的
               (比如:1111 1111+1 == 1 1000 0000 == -128 )
  • 解析:

        (4)、进制

源码中可以使用八进制、十进制或十六进制,但实际数据在内存中一律是 二进制

二、浮点型(float、double)

  • 概念:用来表达小数的数据类型
  • 全称:floating point
  • 语法:
    • 单精度浮点型(float),典型尺寸是4字节
    • 双精度浮点型(double),典型尺寸是8字节
    • 长双精度浮点型(long double),典型尺寸是16字节
float f1 // 单精度 double f2 // 双精度 long double f3 // 长双精度
说明:占用内存越多,能表达的 精度越高

(1)、精度说明,在内存中的存放:

  • 公式:
  • 例子:
  • 说明:
·s表示符号位,当例子S=0,值为正数;当S=1,值为负数。
·M表示有效数字,大于等于1,小于2。
·E表示指数位。
如此5.5都二进制存储就是:S符号位1位上图红色0+E指数位绿色部分八位00000010+M有效数字紫色部分23位00000000000000000001011

三、字符型(char, character) --- 一个字节的int型

  • 概念:用来描述字符的数据类型
  • 全称:character
  • 语法:
char ch1 = 'a'; // 'a'是字符常量,代表字母a char ch2 = '\n'; // '\n'不可见的字符常量,代表回车
  • 内存中字符的表现形式:

(1)、ASCLL表(以ascll码表数值的方式,存储到内存中)

四、字符串(character string)

  • 概念:表达字符串类型的数据
  • 全称:character string

(1)、在内存中的存储:

(2)、格式控制符:

%s // 字符串类型 %-10s: // 左对齐并占用宽度为 10 的字符串; %10s: // 右对齐并占用宽度为 10 的字符串;
  • 解析:
  • 示例代码:
#include <stdio.h>
#include <string.h>

int main(int argc, char const *argv[])
{
    // 1、定义字符串
    char ch1 = 'a';                 // 单引号''表示字符
    char buf1[16] = "nihao";        // 双引号""表示字符串(推荐初学者表示字符串时,使用buf数组来表示)
    char *p1      = "shijie";       // 指针指向字符串常量区

    printf("buf1 = %s\n", buf1);    // 为什么可以刚刚好将字符串打印完全呢??(因为每一个字符串的末尾都有一个结束标记符'\0',函数printf遇到这个结束标记符,就会停止打印)        
    printf("p1   = %s\n", p1);

    // 2、字符串的显示位置控制
    printf("buf1(字符串左对齐) == %-10sfanggong\n", buf1);
    printf("p(字符串右对齐)    == %10s\n", p1);

    // 笔试题1:
    char buf2[5] = "nihao";         // 不是字符串(不建议这么写,因为nihao字符已经占了5个字节了,没有'\0'存放的空间)
    char buf3[6] = "nihao";         // 是字符串

    // 笔试题2:strlen和sizeof的区别
    // a、sizeof是一个运算符,能够计算出变量的字节大小,对于字符串来说,sizeof会把字符串最后的那个'\0'字符也计算进去
    printf("sizeof(buf3) == %lu\n", sizeof(buf3));

    // b、strlen是一个函数,是C语言标准字符串库里面提供的一个计算字符串长度的函数,遇到'\0'就会结束
    printf("strlen(buf3) == %lu\n", strlen(buf3));

    // 笔试题3:内存题
    buf1[0] = 'a';                  // 可以赋值(因为赋值的地方是数组,数组的内存处在栈区(可读可写的区域))
    // *(p1+0)  = 'a';              // 不可以赋值(因为赋值的地方是内存的常量区(可读不可写))

    return 0;
}

五、布尔型数据(bool)

  • 概念:布尔型数据只有真、假两种取值,非零为真,零为假。
  • 注意:
示例代码:
#include <stdio.h>
#include <stdbool.h>        // 会有定义的真值(true)和假值(false)

// 官方定义的(stdbool.h)
/*
    #define true    1
    #define false   0
*/

// 自己定义的
#define TRUE    1
#define FALSE   0

int main(int argc, char const *argv[])
{
    // 一般定义
    bool flag = 100;        // 非0为真,0为假

    // 判断方法1:
    if (flag == TRUE)
    {
        printf("11111111111\n");
    }
    else
    {
        printf("222222222\n");
    }

    // 判断方法2:(笔试题)  
    if (flag)       // 真
    {
        printf("3333333333333\n");
    }
    
    if(!flag)       // 逻辑非,假
    {
        printf("4444444444444\n");
    }
    
    return 0;
}

六、常量和变量

  • 概念:不可改变的内存称为常量(该内存可读不可写),可以改变的内存称为变量(该内存可读可写)
  • 变量的类型:int型、char型、float型、double型、字符串型、布尔型等(还有他们无符号、短、长拓展型)
  • 常量的类型:

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值