标题整型变量的分类:
(注意:占几个字节跟操作系统和编译器规定有关,可以在编译器上调试查看!)
1)基本型:类型说明符为int,在内存中占4个字节
2)短整型:short int或short,所占字节和取值范围基本相同
3)长整型:long int或long,在内存中占4个内存
4)无符号型:为unsigned
在编译器中输出变量类型所占字节数:
说明一下,这个程序我原本以为会运行得很顺利,结果还是出了点小插曲。仔细检查发现了,就是这个逗号用成了中文的形式,然后立马改回来了,就输出正确结果。事实证明,在VC++6.0中,int基本型在内存中占4个字节。
当然也可以把sizeof()里面的int替换成其他需要验证的类型所占内存的字节
整型变量的定义
变量定义的一般形式为“
类型说明符 变量名标识符,变量名标识符…;(一个分号表示一个语句结束)
举比较常见的几个例子:
int a,b,c;(定义为整型变量)
short x,y,z;(定义为短整型变量)
float m,n;(定义为浮点型变量)
在书写变量定义时,需注意:
一个类型说明符后面可跟多个相同类型的变量,各变量名之间用;隔开。最后一个变量名之后必须用;号结尾。必须先定义变量才能使用,一般放在函数体的开头部分。不定义的话,内存里就不存在这个变量。当然无法使用它。
【例3.1】
#include<stdio.h>
void main()
{
int a,b,c,d;
unsigned u;
a = 12;
b = -24;
u = 10;
c = a + u; d= b+u;
printf(“a+u=%d,b+u=%d\n”,c,d);
}
因为使用到了printf输出语句,所以我们开头要用预处理语句stdio.h。在”“里面的都是以字符的形式输出,就是说你在字符串里面写什么输出的就是什么,%d是形式输出,每一个%对应后面的数,即第一个%d对应c,第二个%d对应d,c,d均以整型的形式输出。
输出的结果如图所示:
当然我们这里是以字母相加的形式输出,我们也可以用%d对其进行替换,输出数字相加的形式,当然后面对应%d的字母也要相应替换掉,否则会乱掉,以图为鉴:
溢出
溢出呢,怎么理解比较好一些呢?打个比方吧,我们来想一下一个水桶,水桶的容积是固定的,也就是说这个水桶能装多少水是固定的,当我们往里面放水,水的体积超过了水桶的容积的时候,超过水桶容积这部分的水就会溢出了。同样的道理,我们的内存给一个类型的数据分配的空间是固定的,当存入的数据值大小超过这个存储空间时,超出的这部分就自然而然地溢出了。
【例3.2】
#include <stdio.h>void main(){int a,b;a = 32767;b = 1 + a;printf("%d,%d\n",a,b);}
运行出来的结果图如下:
这段代码的功能就是输出a,b的数值。int在内存里面占四个字节。此时并没有出现任何异常。但是当我们将int 改为short int 时,就变成如下情况:
这个时候就发生溢出了。为什么呢?
因为啊,虽然是十六位,但是第一位是符号位,实际用来存储的就只有15位。我们来看一下:
32767:0111 1111 1111 1111
-32768: 1000 0000 0000 0000(负数的最大数)
当在程序中遇到不同类型的数据时,编译器会进行自动转换,分为两种,一种是显式转换,另一种是隐式转换。通常,编译器进行的是的分类:
(注意:占几个字节跟操作系统和编译器规定有关,可以在编译器上调试查看!)1)基本型:类型说明符为int,在内存中占4个字节2)短整型:short int或short,所占字节和取值范围基本相同3)长整型:long int或long,在内存中占4个内存4)无符号型:为unsigned在编译器中输出变量类型所占字节数:说明一下,这个程序我原本以为会运行得很顺利,结果还是出了点小插曲。仔细检查发现了,就是这个逗号用成了中文的形式,然后立马改回来了,就输出正确结果。事实证明,在VC++6.0中,int基本型在内存中占4个字节。当然也可以把sizeof()里面的int替换成其他需要验证的类型所占内存的字节 ## 整型变量的定义变量定义的一般形式为“类型说明符 变量名标识符,变量名标识符…;(一个分号表示一个语句结束)举比较常见的几个例子:int a,b,c;(定义为整型变量)short x,y,z;(定义为短整型变量)float m,n;(定义为浮点型变量)在书写变量定义时,需注意:- 一个类型说明符后面可跟多个相同类型的变量,各变量名之间用;隔开。 - 最后一个变量名之后必须用;号结尾。 - 必须先定义变量才能使用,一般放在函数体的开头部分。不定义的话,内存里就不存在这个变量。当然无法使用它。 【例3.1】> #include<stdio.h>void main(){ int a,b,c,d; unsigned u; a = 12; b = -24; u = 10; c = a + u; d= b+u; printf(“a+u=%d,b+u=%d\n”,c,d);}因为使用到了printf输出语句,所以我们开头要用预处理语句stdio.h。在”“里面的都是以字符的形式输出,就是说你在字符串里面写什么输出的就是什么,%d是形式输出,每一个%对应后面的数,即第一个%d对应c,第二个%d对应d,c,d均以整型的形式输出。输出的结果如图所示:当然我们这里是以字母相加的形式输出,我们也可以用%d对其进行替换,输出数字相加的形式,当然后面对应%d的字母也要相应替换掉,否则会乱掉,以图为鉴:## 溢出溢出呢,怎么理解比较好一些呢?打个比方吧,我们来想一下一个水桶,水桶的容积是固定的,也就是说这个水桶能装多少水是固定的,当我们往里面放水,水的体积超过了水桶的容积的时候,超过水桶容积这部分的水就会溢出了。同样的道理,我们的内存给一个类型的数据分配的空间是固定的,当存入的数据值大小超过这个存储空间时,超出的这部分就自然而然地溢出了。【例3.2】#include <stdio.h>void main(){ int a,b; a = 32767; b = 1 + a; printf("%d,%d\n",a,b);}
运行出来的结果图如下:这段代码的功能就是输出a,b的数值。int在内存里面占四个字节。此时并没有出现任何异常。但是当我们将int 改为short int 时,就变成如下情况:这个时候就发生溢出了。为什么呢?因为啊,虽然是十六位,但是第一位是符号位,实际用来存储的就只有15位。我们来看一下:32767:0111 1111 1111 1111-32768: 1000 0000 0000 0000(负数的最大数) 当在程序中遇到不同类型的数据时,编译器会进行自动转换,分为两种,一种是显式转换,另一种是隐式转换。通常,编译器进行的是隐式转换,就是将范围小的数据类型向范围大的转换,而显式转换又称强制转换,将更大范围的数据类型转换成更小类型的数据。
此次程序编译过程出现的一丢丢错误:就是在printf("%d,%d\n",a,b);这句话中,我将"后面a前面的这个逗号给省略掉之后,编译就一直在报错,于是检查一遍发现后,添加上去了,就没问题了。这里是因为要用这个逗号进行分段,使其能够进行区分识别是以字符串形式输出还是以数字形式输出。下次不能再犯这种错误了呀!
实型数据
1、实型常量的表示方法:
实型就是数学中的实数,C语言采用十进制表示,二进制存储。有时候我们分不清一个数字是整型还是浮点型,举个栗子,5.00是个整数还是浮点数呢?不确定对吧,5.00f后面加一个f。
2、存放形式
学完了表示方法我们再学习一下存储方式,3.1415926这样子存
我们来算一下.31415926*10^1=3.141592
一位为符号位,七位为小数位,剩余的二十四位为指数位
小数部分占的位数越多,数的有效数字越多,精度越高;指数部分占的位数越多,则能标识的数值范围越大。
3、实型变量的分类
分为三种:单精度(float)、双精度(double)、长双精度(long float)三类。