C language - integer variable

Title integer variable classification:

(Note: a few bytes accounts with the operating system and compiler provisions, debugging can be viewed on a compiler!)
1) Basic: type specifier is int, 4 bytes in memory
2) short integer : short int or short, and in the range occupied by substantially the same byte
3) long: long int or long, representing four memory in memory
4) unsigned type: the unsigned

In the compiler output variable type Number of Bytes:
Here Insert Picture Description
Here Insert Picture Description
explain, I thought this program would run very smoothly, and the result was some small episode. Close inspection showed, that is, become a form of Chinese with the comma, and then immediately change back, and outputs the correct result. It turns out that in VC ++ 6.0, int basic 4 bytes in memory.
Of course, you can replace the sizeof () int inside into other types of memory associated with the need to verify byte

The definition of an integer variable

The general form of a variable defined as "
type specifier identifier variable name, variable name identifier ...; ( a semicolon denotes the end of a sentence )
cite a few examples of the more common:
int A, B, C; (defined as an integer variable)
short X, Y, Z; (defined as a short integer variable)
a float m, n-; (defined as the float variable)

When writing variable definitions, please note:

  • A type specifier can be followed by a plurality of variables of the same type, with between the variable name; separated.
  • After the last variable name must be; the end of the number.
  • You must define the variables to use, generally placed at the beginning of the function body. Not defined, there is no memory of this variable. Of course it can not be used.

[Example 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均以整型的形式输出。

输出的结果如图所示:
Here Insert Picture Description
当然我们这里是以字母相加的形式输出,我们也可以用%d对其进行替换,输出数字相加的形式,当然后面对应%d的字母也要相应替换掉,否则会乱掉,以图为鉴:
Here Insert Picture Description

溢出

溢出呢,怎么理解比较好一些呢?打个比方吧,我们来想一下一个水桶,水桶的容积是固定的,也就是说这个水桶能装多少水是固定的,当我们往里面放水,水的体积超过了水桶的容积的时候,超过水桶容积这部分的水就会溢出了。同样的道理,我们的内存给一个类型的数据分配的空间是固定的,当存入的数据值大小超过这个存储空间时,超出的这部分就自然而然地溢出了。

【例3.2】

#include <stdio.h>

void main()
{
  int a,b;
  a = 32767;
  b = 1 + a;
  printf("%d,%d\n",a,b);
}

运行出来的结果图如下:
Here Insert Picture Description
这段代码的功能就是输出a,b的数值。int在内存里面占四个字节。此时并没有出现任何异常。但是当我们将int 改为short int 时,就变成如下情况:
Here Insert Picture Description
这个时候就发生溢出了。为什么呢?
因为啊,虽然是十六位,但是第一位是符号位,实际用来存储的就只有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在编译器中输出变量类型所占字节数:Here Insert Picture DescriptionHere Insert Picture Description说明一下,这个程序我原本以为会运行得很顺利,结果还是出了点小插曲。仔细检查发现了,就是这个逗号用成了中文的形式,然后立马改回来了,就输出正确结果。事实证明,在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均以整型的形式输出。输出的结果如图所示:Here Insert Picture Description当然我们这里是以字母相加的形式输出,我们也可以用%d对其进行替换,输出数字相加的形式,当然后面对应%d的字母也要相应替换掉,否则会乱掉,以图为鉴:Here Insert Picture Description## 溢出溢出呢,怎么理解比较好一些呢?打个比方吧,我们来想一下一个水桶,水桶的容积是固定的,也就是说这个水桶能装多少水是固定的,当我们往里面放水,水的体积超过了水桶的容积的时候,超过水桶容积这部分的水就会溢出了。同样的道理,我们的内存给一个类型的数据分配的空间是固定的,当存入的数据值大小超过这个存储空间时,超出的这部分就自然而然地溢出了。【例3.2】#include <stdio.h>void main(){ int a,b; a = 32767; b = 1 + a; printf("%d,%d\n",a,b);}运行出来的结果图如下:Here Insert Picture Description这段代码的功能就是输出a,b的数值。int在内存里面占四个字节。此时并没有出现任何异常。但是当我们将int 改为short int 时,就变成如下情况:Here Insert Picture Description这个时候就发生溢出了。为什么呢?因为啊,虽然是十六位,但是第一位是符号位,实际用来存储的就只有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 1

我们来算一下.31415926*10^1=3.141592
一位为符号位,七位为小数位,剩余的二十四位为指数位

小数部分占的位数越多,数的有效数字越多,精度越高;指数部分占的位数越多,则能标识的数值范围越大。

3、实型变量的分类
分为三种:单精度(float)、双精度(double)、长双精度(long float)三类。

Published 10 original articles · won praise 1 · views 1246

Guess you like

Origin blog.csdn.net/weixin_43671182/article/details/94203602