数据类型以及变量

数据类型

为什么要对数据进行分类?
1、在自然界中数据本来就是分类的
2、对数据进行分类可以节约空间,提高运行效率

C语言中把数据分为自建(程序员自己设计的类型,例如结构、联合、类)、内建(C语言自带的)

注:c语言中32个关键词从这可引出

整型

signed 有符号:

​ signed char 1 -128~127
​ signed short 2 -32768~32767
​ signed int 4 正负20亿
​ signed long 4/8 正负20亿/以9开头正负19位数
​ signed long long 8 以9开头19位数

注意:signed 不加代表了加

unsigned 无符号:

​ unsigned char 1 0~255
​ unsigned short 2 0~65535
​ unsigned int 4 0~40亿
​ unsigned long 4/8
​ unsigned long long 8 0~以1开头的20位整数

注意: 由于定义无符号的数据比较麻烦,标准库中有头文件<stdint.h>把无符号的类型进行了重定义
uint8_t uint16_t uint32_t uint64_t
int8_t int16_t int32_t int64_t

浮点型:

​ float 4
​ double 8
​ long double 12/16
​ 小数点后6位有效,六位之后约掉

模拟型

​ char 字符型:
​ 所谓的字符就是符号或图案,在内存中是以整数形式存储的,需要显示字符时,会根据ASCII码表中的对应关系来显示出对应的符号或图案
​ 0 ‘\0’ 特殊字符
​ 48 ‘0’ (根据这些可以计算其他的字符)
​ 65 ‘A’
​ 97 ‘a’

bool 布尔型:

​ 先有的C语言才发明的bool类型,所以C语言没有真正的布尔类型,必须加上头文件<stdbool.h>才能使用。
​ bool - > true =1 false= 0 (大部分系统中)

sizeof(unsigned int) 计算类型、变量所占的字节数

注;该函数与strlen函数都是计算自己的,该函数中的表达式是不会运行的,直接显示后面的值,如

 sizeof((a>5)?4:8.0);  
 返回值是8,即8.0的字节数

常量与变量

什么是变量呢

​ 相当于存储数据的盒子,在程序运行期间数值可以发生改变

变量的定义:

​ 类型 变量名;

​ int num;

变量名的取名规则:

​ 1、由字母、数字、下划线组成。
​ 2、不能以数字开头。
​ 3、不能与32个关键字重名 最好也不要跟这些函数名重名,比如printf、scanf、sizeof、bool。
​ 4、见名知意(功能、类型、范围)
​ 注意:变量的值是随机的,为了安全起见,一般初始化为0。
​ int num = 0;

使用:

赋值:  num = 10;
参与运算 num -> 10
变量的输入输出:
输出:
int printf(const char *format, ...);
功能:输出数据
format:"双引号包含的提示信息+占位符"...:    变量列表
返回值: 输出字符的个数

注:常用printf函数来检测bug出现在哪里。

格式化的输出:
  %nd 显示n个字符宽度,不足则补空格,右对齐
    %-nd    显示n个字符宽度,不足则补空格,左对齐
    %0nd    显示n个字符宽度,不足则补0,右对齐
    %n.mf   显示n个字符宽度,不足补空格,m表示小数点后的位数
    %g      不显示小数点后多余的0
输入:
int scanf(const char *format, ...);
   功能:输入数据
   format:"双引号包含的占位符"
   ...: 变量地址列表   变量的地址 = &变量名
   返回值:成功输入的数据的个数

什么常量呢

程序运行期间数值不能发生改变的叫常量(存储在text代码段),若强行改变就会出现段错误。

例如:

100 默认int
100l long
100ll long long
100u unsigned int
100lu   unsigned long
100llu

3.14 默认double
3.14f  float

类型转换

自动类型转换:

只有相同的类型的数据才能进行运算,不同类型的数据需要转换成相同类型才能运算
转换规则:以不丢失数据为基础,适当地牺牲一些空间
1、字节少向字节多的转
2、有符号向无符号转
3、整型向浮点型转

​ ( / % 除数不能为0,否则产生 "浮点数例外,核心已转储的报错信息)

强制类型转换:

​ (新类型)数据

​ 有丢失数据的风险,谨慎使用

指针类型的强制转换
int m;

int *pm = &m;

char *cp = (char *)&m;
结构体之间的强制转换:
struct str1 a;

struct str2 b;

a=*((struct str1*)&b);  
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值