C语言——数据类型

本文详细介绍了C语言中的整型(int, short, long, long long, unsigned)及其大小、声明与赋值,包括八进制和十六进制表示。此外,还讨论了浮点型(float, double, long double)的特性和溢出问题,以及字符型(char)的使用,包括ASCII编码和大小写转换。最后提到了变量与常量的概念,包括作用域和生命周期。
摘要由CSDN通过智能技术生成

整型

int 类型

没有小数部分的数

大小

4字节

声明&赋值

八进制:以0开头

十进制:正常输入

十六进制:以0X或0x开头

int i;                 //声明
i=10;                  //1.通过 = 赋值
scanf("%d",&i);        //2.通过函数获取值(例如:scanf())

初始化

在变量声明的同时,为变量赋一个初始值。

int i=10;              //初始化,十进制
int eight=020;         //八进制
int sixteen=0xff;      //十六进制

打印int值

#include<stdio.h>
int main()
{
    int i=25;
    printf("%d",i);        //十进制,常用
    printf("%o",i);        //八进制
    printf("%x",i);        //十六进制
    printf("%#o",i);       //带八进制标识,八进制
    printf("%#x",i);       //带十六进制标识,十六进制
    return 0;
}

其他类型整形

    short s=128;         //短整型——2字节,适用于小于int的数
	                     //显示 %hd
	long l=1000;         //长整型——4字节,适用于大于int的数
	                     //显示 %ld
	long long ll=100000; //更长的整形——8字节
	                     //显示 %lld
 
	unsigned int u = 123;//无符号位 适用于计数(无负数)
	                     //unsigned (short, int, long, long long)
	                     //显示 %hu,%u,%lu,%llu

整形溢出

当数值,超过整型类型表数范围时。(属于未定义行为)

代表性行为:循环。(可以理解为圆圈、钟表)

#include<stdio.h>
int main()
{
    int i=2147483647;
    unsigned int ui=4294967295;
    printf("%d %d %d\n",i,i+1,i+2);
    ptintf("%u %u %u\n",ui,ui+1,ui+1);
    return 0;
}

输出:

        2147483647 -2147483648 -2147483647

        4294967295 0 1

字符型

char类型

char类型用于存储字符,从技术层面,char类型是整数类型。计算机使用数字编码来处理字符,常用编码为ASCII编码。

大小

1字节

声明&赋值

以整数对char赋值时,为字符对应ASCLL码值!

char c,ch;                //声明
c='a';                    //1.赋值,单引号括起为字符,其内只能有一个字符
c=65;                     //1.1   c='A'
scanf("%c",&c)            //2.通过函数赋值

打印字符值

#include<stdio.h>
int main()
{
    char c='a';
    printf("%c",c);	//使用%c转换说明,打印char类型 
    return 0;
}

有符号还是无符号

有些C编译器将char实现为有符号类型,(-128~127),有些实现为无符号类型,(0~255)。

根据C90标准,C语言允许在关键字char前面使用signed或unsigned。这样无论编译器默认char是什么类型,singed char表示有符号类型,而unsigned char表示无符号类型(处理小整数时,很有用)。如果只是char处理字符,则char前无需使用任何修饰符。

字母对应ASCII

A~Z 65~90

a~z 97~122

#include<stdio.h>                //字母大小写转换
int main()
{
    char c;
    scanf("%c",&c);              //输入字符值
    if(c<'Z'&&c>'A')
    	printf("%c",c+32);    //大写转小写
     else if(c<'z'&&c>'a')
     	printf("%c",c-32);    //小写转大写
     else
     	printf("输入不为字母")
}

浮点型

浮点值的上溢和下溢

上溢:计算导致数字过大,超过当前类型的表数范围。

        在这种情况下,会给一个表示无穷大的特定值

下溢:超过表数的最小值。

        造成有效数字丢失

float类型

单精度,必须至少精确表示小数点后六位有效数字

大小

4字节

声明&赋值

浮点常量,系统默认为double类型,计算后会的值会截断为float

可在浮点数后,加上f或F可覆盖默认设置

float f;			//声明
f=1.2f;   			//1.赋值
scanf("%f",&f);		//2.通过函数赋值

double类型

双精度,至少13位有效数字

减小了舍入误差

大小

8字节

声明&赋值

double d;			    //声明
d=3.1415926;  		    //1.赋值
scanf("%lf",&d);		//2.通过函数

输入&输出

输入%lf

输出%f

        printf()函数中没有%lf(标准定义)

float&double

float运算快于double

double精度大于float

(详解见数据存储)

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS
int main()
{
    float f1, f2,f3;
    f1 = 92.0;
    f2 = 22.3;
    f3 = f1 * f2;
    double d1, d2,d3;
    d1 = 92.0;
    d2 = 22.3;
    d3 = d1 * d2;
    printf("%.4f*%.4f=%.3f\n", f1, f2, f3);
    printf("%.4f*%.4f=%.4f\n", d1, d2, d3);
    return 0;
}

long double类型

可以满足比double更高的精度要求

大小

8字节

声明&赋值

long double ld;   		//可以满足比double更高的精度要求
ld=5.32e-5;      		//1.赋值
scanf("%lf",&ld);		//2.通过函数

打印浮点值

#incldue<stdio.h>
int main()
{
    float f=3.1;
    double d=3.14;
    long double ld=3.14159;
    
    printf("%f   %e\n",&f,&f);		//使用%f转换说明,打印float、double类型      
    printf("%f   %e\n",&d,&d);		//使用%e转换说明,打印指数计数法的浮点数
    
    printf("%lf   %le\n",&ld,&ld);		//使用%lf转换说明,打印long double类型
    					                //使用%le转换说明,打印指数计数法的浮点数
    return 0;
}

类型大小输出

#include<stdio.h>
int main()
{
    printf("%d\n", sizeof(char));

    printf("%d\n", sizeof(short));
    printf("%d\n", sizeof(int));
    printf("%d\n", sizeof(long));
    printf("%d\n", sizeof(long long));
    printf("%d\n", sizeof(float));               
    printf("%d\n", sizeof(double));
    printf("%d\n", sizeof(long double));
    return 0;                    

}

变量&常量

变量:在整个程序运行过程中可能会发生变化。

常量:在整个程序运行过程中不会发生变化。

变量

  • 局部变量
  • 全局变量
#include<stdio.h>
int global=520;		//全局变量
int main()
{
    int local=521;		//局部变量
    int global=1314;	//局部变量
    printf("global=%d\n",global);
    return 0; 	   
}

输出

        global=1314

  • 局部变量和全局变量同名时,优先使用局部变量;
  • 变量在同一范围(作用域)内只能声明一次;

作用域(scope)

程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

  • 局部变量的作用域是变量所在的局部范围。
  • 全局变量的作用域是整个工程。

生命周期

        变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

  • 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
  • 全局变量的生命周期是:整个程序的生命周期。

常量

  • 字面常量
  • const 修饰的常变量(只读)
  • #define 定义的标识符常量
  • 枚举常量
#include<stdio.h>
#define PI 3.14			//#define定义的标识符常量
enum Sex 				//MALE、FEMALE 为枚举常量
{
    MALE,
    FEMALE,
};
int main()
{
    3.14				//字面常量
    100;				//字面常量
    const char c='a';		//const修饰的常量	
    printf("%f",PI*2);
    return 0;
}

最难不过坚持!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值