• c++基础知识-数据类型(详解)


    目录

    一-变量的相关概念

    为什么需要变量

    变量的介绍

    概念

    变量使用的基本步骤

    变量使用注意事项

    变量的数据类型

    注意:

    数据类型相关

    整型:

    基本介绍

    整数的类型

    整型的使用细节

    浮点类型

    基本介绍

    浮点类型

    说明一下:

    浮点型使用细节

    字符类型

    基本介绍

    字符类型使用细节

    字符类型本质探讨

    布尔类型

    基本介绍

     变量:求正整数的平方

    二-C语言中的常量

    字面常量

    #define定义的标识符常量

    枚举常量

    常量:计算圆的面积

    一、数据类型

    1.基本类型

    2.sizeof运算符

    3.signed和unsigned 

    二、基本数据类型的取值范围

    1.比特位

    2.字节

    3.符号位

    4.补码

     5.基本数据类型的取值范围

    打印学生基本信息

    英文字母判断


    一-变量的相关概念

    为什么需要变量

    不论是使用哪种高级程序语言编写程序,变量都是其程序的基本组成单位。如下代码:

    1. void main() {
    2. int a=1;// 定义了一个整型变量,取名为a, 并赋值为1 (强数据类型语言)
    3. int b=3;// 定义了一个整型变量,取名为b, 并赋值为3
    4. b=89;// 给变量赋值 为 89
    5. printf("a=%d \n",a);// 使用输出语句,把变量a 值输出 %d 表示输出的形式为整数
    6. printf("b=%d \n", b);//使用输出语句,把变量b 值输出 %d 表示输出的形式为整数
    7. getchar(); //将控制台停留,等待输入
    8. }

    变量的介绍

    概念

    变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值)

    变量的使用步骤

    变量使用的基本步骤

    1. 声明变量int num;
    2. 赋值num = 60;
    3. 使用printf("num=%d", num);
    4. 也可以一步到位 : int num2 = 99;
    1. //1.声明变量【告诉计算机要开一个房间】
    2. int num = 1 ; //整型
    3. double score = 2.3; //小数
    4. char gender = 'A'; //字符
    5. char name[] = "尚硅谷"; //字符串

    变量使用注意事项

    1. 变量表示内存中的一个存储区域(不同的数据类型,占用的空间大小不一样)
    2. 该区域有自己的名称 和类型
    3. 变量必须先声明,后使用
    4. 该区域的数据可以在同一类型范围内不断变化
    5. 变量在同一个作用域内不能重名
    6. 变量三要素 (变量名+值+数据类型) ,这一点请大家注意。

    变量的数据类型

    每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间(使用字节多少表示)。

    注意:

    1. 在c中没有字符串类型,使用字符数组char[]表示字符串
    2. 在不同系统上,部分数据类型字节长度不一样,举例:int可以占两个字节或4个字节

    数据类型相关

    整型:

    基本介绍

    C语言的整数类型就是用于存放整数值的,比如 12 , 30, 3456等等

    整数的类型

    类型存储大小(单位为字节)值范围
    char1-128 即-(2^7) 到 127 (2^7-1)
    unsigned char10 到 255 (2^8 - 1)
    signed char1-128 即-(2^7) 到 127 (2^7-1)
    intsigned int (int)2/4-32,768 (- 2^15 ) 到 32,767 (2^15-1)或 -2,147,483,648 (- 2^31) 到 2,147,483,647 (2^31 -1)
    unsigned int2/40 到 65,535 (2^16-1) 或 0 到 4,294,967,295 (2^32 -1)
    short (signed short)2-32,768 (- 2^15)到 32,767 (2^15 -1)
    unsigned short20 到 65,535 (2^16 - 1)
    long (signed long)4-2,147,483,648 (- 2^31) 到 2,147,483,647 (2^31 - 1)
    unsigned long40 到 4,294,967,295 (2^32 - 1)

    整型的使用细节

    1. 各种类型的存储大小与操作系统、 系统位数和编译器有关 ,目前通用的以64位系统为主。
    2. 在实际工作中, c程序通常运行在linux/unix 操作系统下.大众:使用windows10(64位)
    3. C语言的整型类型, 分为有符号 signed 和无符号 unsigned 两种, 默认是 signed
    4. C程序中整型常声明为int型, 除非不足以表示大数, 才使用long long
    • bit(位): 计算机中的最小存储单位。 byte(字节):计算机中基本存储单元。
      1. 1byte = 8bit [二进制再详细说, 简单举例一个 short 3 和 int 3 ]
      2. short 3 在内存中占有 2字节
      3. int 3 在内存中占有 4个字节

    浮点类型

    基本介绍

    C语言的浮点类型可以表示一个小数,比如 123.4 , 7.8 , 0.12等等

    浮点类型

    类型存储大小值范围精度
    float 单精度4 字节1.2E-38 到 3.4E+386 位小数
    double 双精度8 字节2.3E-308 到 1.7E+30815 位小数

    说明一下:

    1. 关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位 , 浮点数是近视值
    2. 尾数部分可能丢失,造成精度损失。

    浮点型使用细节

    1. 浮点型常量默认为double型 , 声明float型常量时, 须后加‘f’或‘F’。
    2. 浮点型常量有两种表示形式
      1. 十进制数形式:如: 5.12 512.0f .512 (必须有小数点)
      2. 科学计数法形式:如: 5.12e2 、 5.12E-2
    3. 通常情况下,应该使用double型,因为它比float型更精确。
    4. printf("d1=%f ", d1); // 在输出时,默认保留 小数点6位

    字符类型

    基本介绍

    字符类型可以表示单个字符,字符类型是char, char是1个字节(可以存字母或者数字),多个字符称为字符串, 在C语言中 使用 char数组 表示,数组不是基本数据类型,而是构造类型。

    字符类型使用细节

    1. 字符常量是用单引号('')括起来的单个字符。 例如: char c1 ='a'; char c3 = '9';

    2. C中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如: char c3 = ‘\n’; // '\n'表示换行符

    3. 在C中, char的本质是一个整数,在输出时,是ASCII码对应的字符。

    4. 可以直接给char赋一个整数,然后输出时,会按照对应的ASCII 字符输出 [97]

    5. char类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码.

      1. char c1 = 'a';
      2. char c2 = 'b';

    字符类型本质探讨

    1. 字符型 存储到 计算机中,需要将字符对应的码值(整数)找出来
      1. 存储:字符’a’——>码值 (97)——>二进制 (1100001)——>存储()
      2. 读取:二进制(1100001)——>码值(97)——> 字符’a’——>读取(显示)
    2. 字符和码值的对应关系是通过字符编码表决定的(是规定好)

    布尔类型

    基本介绍

    1. C语言标准(C89)没有定义布尔类型,所以C语言判断真假时以0为假,非0为真 [案例]
    2. 但这种做法不直观,所以我们可以借助C语言的宏定义 。
    3. C语言标准(C99)提供了_Bool 型, _Bool仍是整数类型,但与一般整型不同的是,_Bool变量只能赋值为0或1,非0的值都会被存储为1, C99还提供了一个头文件 定义了bool代表_Bool, true代表1, false代表0。只要导入 stdbool.h ,就能方便的操作布尔类型了 , 比如 bool flag = false;
    4. 条件控制语句; if
    5. 循环控制语句; while …

     变量:求正整数的平方

    使用while循环修改变量值,依次打印10以内(包含10)所有正整数的平方。程序执行的第一步需要定义合适的变量用于后续逻辑的实现,请选出正确的变量定义,填在以下代码的(1)处。

    1. #include
    2. int main(int argc, char** argv)
    3. {
    4.     (_____1_____)
    5.     while (num <= max_num)
    6.     {
    7.         result = num * num;
    8.         printf("%d ^ 2 = %d\n", num, result);
    9.         num = num + step;
    10.     }
    11.     return 0;
    12. }

    小知识:C语言变量的生命周期和作用域


     

    正确答案:

    1. int num = 1;
    2. int max_num = 10;
    3. int step = 1;
    4. int result = 0;

    二-C语言中的常量

    C编程中的常量是一些固定的值,它在整个程序运行过程中无法被改变。

    字面常量

    字面常量是直接写出的固定值,它包含C语言中可用的数据类型,可分为整型常量,字符常量等。如:9.9,“hello”等就属于这一类常量。

    ##const修饰的常变量

    有的时候我们希望定义这么一种变量:值不能被修改,在整个作用域中都维持原值。为了满足用户需求,C语言标准提供了const关键字。在定义变量的同时,在变量名之前加上const修饰。如下所示:

    1. int main()
    2. {
    3. const int a = 1; // const修饰的常变量
    4. }
    • const修饰的常变量,本质上是变量。

    • 但具有常属性,不能被修改。

      1. int main()
      2. {
      3. const int a = 1;
      4. a = 2; // 错误
      5. const int n = 20;
      6. int arr[n] = { 0 }; //n本质上是变量
      7. }

      关于上述n的使用,需要说明的是:在C99标准之前,数组的大小只能是常量修饰,不支持变长数组。

    #define定义的标识符常量

    C语言提供了***#define***命令定义标识符常量,该标识符常量在程序中是个定值,通常用于代表数组容量或涉及数学的常量等。如:

    1. #define PI 3.14159
    2. #define SIZE 10 // 此处SIZE代表数组元素个数
    3. int main()
    4. {
    5. int arr[SIZE]={0};
    6. return 0;
    7. }

    如需修改数组大小,只需将SIZE所代表的值修改即可,十分方便。

    枚举常量

    日常生活中有一些代表实际意义的常量,有这么一个特点:数值较小且为非负整数。如一周有7天等。C语言提供了一种枚举(Enum)类型,能够列出所有可能会用到的取值,并给它们取一个名字。

    1. int main()
    2. {
    3. enum Sex
    4. {
    5. //枚举常量 性别
    6. MALE,
    7. FEMALE,
    8. SECRET
    9. };
    10. enum Sex s = FEMALE; //利用枚举常量给变量赋值
    11. printf("%d\n", MALE);
    12. printf("%d\n", FEMALE);
    13. printf("%d\n",SECRET);
    14. return 0;
    15. }

    在使用枚举常量的时候,需要注意以下几点:

    • 不能对枚举常量赋值,只能将它们的值赋给其他的变量。
    • 不能再定义与枚举常量名字相同的变量。
    • 不能用&取得它们的地址。

    以上就是C语言中常见的几种常量,合理使用常量可以使程序可读性更强,条理清晰,易于维护。


    常量:计算圆的面积

    使用常量表示圆周率π,并计算半径为2的圆的面积。常量有多种定义方法,请判断哪一项填在(1)处无法使程序正常运行。

    1. #include
    2. (_____1_____)
    3. int main(int argc, char** argv)
    4. {
    5. float radius = 2.0;
    6. float area = PI * radius * radius;
    7. printf("半径为%.2f的圆,面积是%.2f", radius, area);
    8. return 0;
    9. }

    C语言常量种类:

     正确答案:

    1. const float PI;
    2. PI = 3.14;

    一、数据类型

    1.基本类型

    (1)整数类型

    • short int
    • int
    • long int
    • long long int

    (2)浮点数类型

    • float
    • double
    • long double

    (3)字符类型

    • char

    (4)布尔类型

    • _Bool

    (5)枚举类型

    • enum

    2.sizeof运算符

    sizeof 运算符用于获得数据类型或表达式的长度

    如:-sizeof(object);              //sizeof(对象)

           -sizeof(type_name);      //sizeof(类型)

           -sizeof object;               //sizeof 对象

    代码举例:

    1. #include
    2. int main()
    3. {
    4. int i;
    5. char j;
    6. float k;
    7. i = 123;
    8. j = 'C';
    9. k = 3.14;
    10. printf("size of int is %d\n",sizeof(int));
    11. printf("size of i is %d\n",sizeof(i));
    12. printf("size of char is %d\n",sizeof(char));
    13. printf("size of j is %d\n",sizeof j);
    14. printf("size of float is %d\n",sizeof(float));
    15. printf("size of k is %d\n",sizeof k);
    16. return 0;
    17. }

    代码运行结果:

     分别打印各类型所占字节:

    1. #include
    2. int main()
    3. {
    4. printf("int = %d\n",sizeof(int));
    5. printf("short int = %d\n",sizeof(short));
    6. printf("long int = %d\n",sizeof(long));
    7. printf("long long int = %d\n",sizeof(long long));
    8. printf("char = %d\n",sizeof(char));
    9. printf("_Bool = %d\n",sizeof(_Bool));
    10. printf("float = %d\n",sizeof(float));
    11. printf("double = %d\n",sizeof(double));
    12. printf("long double = %d\n",sizeof(long double));
    13. return 0;
    14. }

    运行结果(设备不同,结果可能也不同):

    3.signed和unsigned 

            signed:代表有符号的,第一个位代表正负,剩余的代表大小,例如:signed int 大小区间为-128-127。(默认为signed)

            unsigned:代表无符号的,所有的位都为大小,没有负数,例如:unsigned int 大小区间为:0-255。

    • [signed] short [int]
    • unsigned short [int]
    • [signed] int
    • unsigned int
    • [signed] long [int]
    • unsigned long [int]
    • [signed] long long [int]
    • unsigned long long [int]

    代码举例:

    1. #include
    2. int main()
    3. {
    4. short i;
    5. unsigned short j;
    6. i = -1;
    7. j = -1;
    8. printf("%d\n",i);//d为打印带符号的
    9. printf("%u\n",j);//u为打印不带符号的
    10. return 0;
    11. }

    运行结果:

     可见,打印 j 时,结果并不是我们期望出现的-1,而是65535,这与数据类型的取值范围有关。

    二、基本数据类型的取值范围

    1.比特位

    CPU能读懂的最小单位是:比特位,bit,b。每个比特位只能存放二进制数,即0和1.

    2.字节

    内存机构最小寻址单位:字节,Byte,B

    注:1Byte = 8 bit

    一个字节能存放的最大的数(2^{31}-1)用二进制表示为:

    11111111

    该数转化为十进制为:2147483647

    补充:进制

     打印2^{32}-1,代码如下:

    1. # include
    2. #include
    3. int main()
    4. {
    5. unsigned int result = pow(2,32) - 1;
    6. printf("result = %u\n",result);
    7. return 0;
    8. }

    运行结果:

     注意:若不加“unsigned”,则输出结果为2147483647.这是因为默认情况下int是signed类型的,也就是说左边第一位是符号位,所以必须加“unsigned”来使其变为一个无符号的整型变量,使得32位都用来存放数值。

    3.符号位

    • 存放signed类型的存储单元中,左边第一位表示符号位。如果该位为0,表示该整数是一个正数;如果该位为1,表示该整数是一个负数。
    • 一个32位的整型变量,除去左边第一位符号位,剩下表示值的只有31个比特位。

    4.补码

    • 正数的补码是该数的二进制形式。
    • 负数的补码需要通过以下几步获得:

    (1)先取得该数的绝对值的二进制形式

    (2)再将第1步的值按位取反(除符号位)

    (3)最后将第2步的值加1

    例如:

     5.基本数据类型的取值范围

    数据类型字节数取值范围
    char1-128~127
    unsigned char210~255
    short2-32768~32767
    unsigned short20~65535
    int4-2147483648~2147483647
    unsigned int40~4294967295
    long4-2147483648~2147483647
    unsigned long40~4294967295
    long long8-9223372036854775808~9223372036854775807
    unsigned long long80~18446744073709551615
    数据类型字节数取值范围(绝对值)
    float41.17549*10^-38~3.40282*10^38
    double82.22507*10^-308~1.79769*10^308
    long double122.22507*10^-308~1.79769*10^308

    打印学生基本信息

    用不同的基本数据类型保存一名学生的各项信息,并打印输出。请判断以下选项中哪一个能更好地存储学生的基本信息,选出正确答案填在(1)处。

    1. #include
    2. #include
    3. int main(int argc, char** argv)
    4. {
    5. (_____1_____)
    6. printf("学号:\t%d\n", student_id);
    7. printf("姓名:\t%s\n", name);
    8. printf("性别:\t%s\n", sex);
    9. printf("年龄:\t%d\n", age);
    10. printf("身高:\t%.2f\n", height);
    11. printf("体重:\t%.2f\n", weight);
    12. printf("是否独生子女:\t%s\n", only_child ? "是": "否");
    13. return 0;
    14. }

    C语言数据类型分类:

     

     正确答案:

    1. int student_id = 1001;
    2. char name[] = "张三";
    3. char sex[] = "男";
    4. int age = 18;
    5. bool only_child = true;
    6. float height = 170.50;
    7. float weight = 55.25;

    英文字母判断

    判断一个字符是否是英文字母。请判断以下选项中哪个条件不能填在(1)处。

    1. #include
    2. int main(int argc, char** argv)
    3. {
    4. char ch;
    5. printf("请输入一个字符:");
    6. scanf("%c", &ch);
    7. if (_____(1)_____)
    8. printf("字符 \'%c\' 是一个英文字母", ch);
    9. else
    10. printf("字符 \'%c\' 不是一个英文字母", ch);
    11. return 0;
    12. }

    下图是ASCII表,ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

    正确答案:

    ('a' <= ch <= 'z') || ('A' <= ch <= 'Z')

  • 相关阅读:
    Class 类
    tcp专题
    (免费分享)基于springboot健康运动-带论文
    FreeRTOS个人笔记-软件定时器
    MIT 6.5840 Raft Implementation(2B, Log Replication)
    万象奥科参展“2023 STM32全国巡回研讨会”—武汉站
    优优嗨聚集团:OTC药品能否纳入报销成为各方关注焦点,对OTC医疗有何影响
    Flask(Jinja2) 服务端模板注入漏洞(SSTI)
    【表面缺陷检测】钢轨表面缺陷检测数据集介绍(2类,含xml标签文件)
    会计部门通过数字化工作流程提高生产力
  • 原文地址:https://blog.csdn.net/mooczhimahu/article/details/126051318