小白的编程经验(数据类型与变量、常量)

一、数据类型

首先思考一个问题,为什么要对数据进行分类?
    1、在现实社会中数据本身就是自带类别属性,比如:人数基本上都是整数,总不能说半个人吧。
    2、对数据进行分类可以节约存储空间、提高运行效率。数据类型在内存的存储如下图,不同的数据类型所占的存储空间不同。如果不给不同数据定义类型,可能会出现两种情况:一是存储空间太小导致数据丢失,二是存储空间过大导致空间浪费。这两种情况我们都不希望出现,所以定义了数据类型来规范数据,节约存储空间、提高运行效率。

在这里插入图片描述

存储空间的单位

符号说明
Bit一个二进制位,只能存储0或1,是计算存储数据的最小单位
Byte八个二进制位,是计算机存储数据的基本单位
KB1KB = 1024 Byte
MB1MB = 1024 KB
GB1GB = 1024 MB
TB1TB = 1024 GB
PB1PB = 1024 TB

不同数据类型的字节数

可以使用sizeof运算符计算类型的字节数。

1)整型

整型有两种:有符号(signed)和无符号(unsigned),差别在于有符号的数据最高位是符号位,能表示负数。无符号的数据最高位不是符号位,只能表示非负数。

默认不加前缀的整型都为有符号的(signed),无符号的需要加unsigned。

数据类型存储大小表示范围
signed char1个字节-128~127
signed short2个字节-32768~32767
signed int4个字节正负20亿左右
signed long4/8个字节(看操作系统,32位是4个字节,64位是8个字节)正负20亿/正负9开头的19位整数
signed long long8个字节正负9开头的19位整数
unsigned char1个字节0~255
unsigned short2个字节0~65535
unsigned int4个字节0-40亿左右
unsigned long4/8个字节(看操作系统,32位是4个字节,64位是8个字节)0-40亿/0-1开头的20位整数
unsigned long long8个字节0-1开头的20位整数

注意:由于定义无符号数据时比较麻烦,标准库(stdint.h)把这些无符号的类型重新定义成了以下类型:
    无符号: uint8_t  uint16_t   uint32_t   uint64_t
    有符号: int8_t     int16_t    int32_t    int64_t

2)浮点型

浮点型数据采用科学计算方法存储,二进制与真实数据之间需要换算,因此浮点型数据耗时要比整型数据多得多,编码时尽量选择整型。一般精确到小数点后六位

数据类型存储大小
float4个字节
double8个字节
long double12/16个字节

3)模拟型

字符型char

字符其实就是符号或图案,内存中存储的是整数,当需要显示成字符时,会根据数字和ASCII码表中对应的关系显示相应的符号或图案。
例如:

符号含义ASCII码值
‘\0’空格0
‘0’字符048
‘A’字符A65
‘a’字符a97

完整ASCII码表如下:

在这里插入图片描述



布尔型bool

由于先有C语言之后才有了bool类型,所以C语言中是没有真正的bool类型。在此之前的C语言中,使用整型来表示真假。在输入时:使用非零值表示真;零值表示假。在输出时:真的结果是1,假的结果是0;如果需要使用bool类型需要先调用stdbool.h头文件。

数据类型转换

数据类型转换分为两类:自动类型转换和强制类型转换。

自动类型转换:
只有相同类型的数据才能运算,不同类型的数据必须转换成相同的类型才能进行计算

转换规则:(以不丢失数据为前提,适当牺牲一些空间)
1、字节少的向字节多的转换
2、有符号向无符号的转换
3、整型向浮点型转换

强制类型转换:(新类型)数据
强制类型转换有丢失数据的风险,要慎重使用


二、变量

变量:程序在运行期间数据可以变化的叫做变量,相当于存储数据的容器
定义: 数据类型+变量名(如:int a;)
使用方法:赋值(如 num = 100;)、运算(如 num * 10;)
注意:变量的默认值是随机的,为了安全起见要在变量定义时进行初始化(定义时给变量赋值叫作初始化),一般默认设0。

变量的命名规则

  1. 由字母、数字、下划线组成
  2. 不能以数字开头
  3. 不能与系统关键字重命(32个)
    数据类型相关的:
    内建类型(7个):
    void char short int long float double
    自建类型(4个):
    struct union enum sizeof
    类型限定符(9个):
    signed unsigned auto const static volatile register extern typedef
    流程控制相关:
    分支(5个):
    if else switch case default
    循环(3个):
    for while do
    跳转(4个):
    break continue return goto
  4. 见名知意(功能、类型、范围…),看到变量名就能明白变量的功能、类型、范围

注意:前三点为命名的硬性规定,任何变量名都不能违反。第四点见名知意只是命名建议。

变量的输入、输出

类型占位符

C语言中通过类型占位符的方式来传递变量的类型

变量名占位符变量名占位符
char%hhdunsigned char%hhu
short%hdunsigned short%hu
int%dunsigned int%u
long%ldunsigned long%lu
long long%lldunsigned long long%llu
float%fdouble%lf
long double%Lfchar%c

格式化输入输出

类型占位符可以通过添加参数来实现不同效果

占位符效果
%nd显示n个字符宽度,不够则补空格,右对齐
%-nd显示n个字符宽度,不够则补空格,左对齐
%0nd显示n个字符宽度,不够则补0,右对齐
%n.mf显示n个字符宽度(小数点也占一个字符宽度),不够则补空格,m表示小数点后位数(四舍五入)
%g不显示小数点后多余的0

输出函数 printf()

int printf(const char *format, …);
功能: 输出数据

format:“双引号包含的格式信息(提示信息+占位符)”
… :      可变长参数(若干个参数)
返回值:返回一个int 值,输出字符的个数


输入函数 scanf()

int scanf(const char *format, …);
功能: 输入数据

format:“双引号包含的格式信息(占位符)”
… :      变量地址列表
返回值:返回一个int 值,成功输入的变量个数

注意:scanf需要的是变量类型、变量地址(变量地址 = &变量名)

三、常量

常量:程序运行期间数值不能变化的叫常量(如:1、2、3、4…)。

当你使用整数100时,它默认的数据类型是 int型。可以通过修改后缀来改变常量的数据类型。
例如: 100u 的数据类型是 unsigned int ;100l 的数据类型是 long ; 100lu 的数据类型是 unsigned long;

当你使用浮点数3.14时,它默认的数据类型是 double型。同样地,也可以通过修改后缀来改变常量的数据类型。
例如: 3.14f 的数据类型是 float ;3.14l 的数据类型是 long double ;


结语

希望这篇文章对你有所帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值