变量的储存类型
- 格式:doc
- 大小:13.50 KB
- 文档页数:1
⼋种基本数据类型先说理论,⼋种基本数据类型:byte、short、int、long、float、double、boolean、char。
概念byte8位、有符号的以⼆进制补码表⽰的整数min : -128(-2^7)max: 127(2^7-1)default: 0对应包装类:Byteshort16位、有符号的以⼆进制补码表⽰的整数min : -32768(-2^15)max: 32767(2^15 - 1)default: 0对应包装类:Shortint32位、有符号的以⼆进制补码表⽰的整数min : -2,147,483,648(-2^31)max: 2,147,483,647(2^31 - 1)default: 0对应包装类:Integerlong64位、有符号的以⼆进制补码表⽰的整数min : -9,223,372,036,854,775,808(-2^63)max: 9,223,372,036,854,775,807(2^63 -1)default: 0对应的包装类:Longfloat单精度、32位、符合IEEE 754标准的浮点数float 在储存⼤型浮点数组的时候可节省内存空间浮点数不能⽤来表⽰精确的值,如货币default: 0.0f对应的包装类:Floatdouble双精度、64位、符合IEEE 754标准的浮点数浮点数的默认类型为double类型double类型同样不能表⽰精确的值,如货币default: 0.0d对应的包装类:Doublecharchar类型是⼀个单⼀的 16 位 Unicode 字符最⼩值是 \u0000(即为0)最⼤值是 \uffff(即为65,535)char 数据类型可以储存任何字符对应的包装类:Characterbooleanboolean数据类型表⽰⼀位的信息只有两个取值:true 和 false这种类型只作为⼀种标志来记录 true/false 情况对应的包装类:Boolean实例对于数值类型的基本类型的取值范围,我们⽆需强制去记忆,因为它们的值都已经以常量的形式定义在对应的包装类中了。
布尔变量的声明布尔变量是一种用来储存真值的数据类型。
它的值只能是真(true)或假(false)。
布尔变量在计算机编程中起着至关重要的作用,它常常用于条件判断和循环控制。
在许多编程语言中,布尔变量被定义为一个特殊的数据类型,比如在C语言中,可以使用关键字"bool"进行声明。
布尔变量的声明是指在编程中定义和初始化一个布尔类型的变量。
声明一个布尔变量的语法通常是先指定变量的数据类型为布尔,然后给变量起一个名字,最后用等号进行赋值。
以下是一个示例:```cbool isTrue = true;```在这个示例中,我们声明了一个布尔变量isTrue,并将其初始化为true。
这意味着isTrue这个变量的值是真。
布尔变量可以有两个可能的取值:true和false。
true代表真,false代表假。
这两个取值是布尔逻辑运算的基础。
布尔运算是一种逻辑运算,它基于布尔代数的原理,用来处理真值。
布尔运算符包括与(and)、或(or)、非(not)等。
布尔变量的使用可以很好地帮助我们进行条件判断。
通过使用布尔变量,我们可以根据不同的条件改变程序的行为。
例如,我们可以使用一个布尔变量来判断一个数是否为偶数:```cint num = 7;bool isEven = (num % 2 == 0);if (isEven) {printf("这个数是偶数");} else {printf("这个数是奇数");}```在这个示例中,我们声明了一个整数变量num,并将其赋值为7。
然后,我们声明一个布尔变量isEven,并用等号将其初始化为一个条件表达式(num % 2 == 0)的结果。
这个条件表达式用来判断num是否为偶数。
如果num的值可以被2整除,那么isEven的值就是true,否则是false。
接下来,我们使用if-else语句来根据isEven的值输出不同的结果。
变量未初始化,为什么得到的值有的是0,有的是随机值?要解释为什么全局变量未初始化为什么是0,⽽动态局部变量是⼀个随机数,就要先弄清楚静态,动态是什么,局部,全局⼜是什么.然后再思考为什么静态是0,就要思考它们的存储⽅式,因此⾃然就要了解内存的内部结构,然后了解它们的原理,⾃然就明⽩了.同时还能就是下初始化和赋值的区别.初始化和赋值的区别是什么?1. 初始化:声明变量的时候同时赋值,声明的时候会划出新的内存区域,同时2. 赋值:变量的储存⽅式:静态储存和动态储存.1. 静态存储:变量定义的时候,分配了⼀定的内存单元,在整个程序中,内存单元都不变.只能初始化⼀次,可以多次赋值,静态存储变量不初始化则初始为0.2. 动态存储:程序执⾏过程中才分配内存单元,使⽤完后就释放,如形参.函数的形式参数就是动态存储⽅式,声明函数的时候不给它分配内存单元.调⽤的时候传⼊实参,就分配内存单元,然后函数执⾏完后,就释放内存.动态存储变量若不初始化,则初始值为⼀个随机数.怎么声明变量的存储⽅式?1. 全局变量包括全局变量和静态全局变量,都是静态存储,因此未初始值未0,静态局部变量是静态存储,只有动态局部变量是动态存储.2. 加上static前缀就是静态存储变量,如static int a = 0;3. 不加static前缀默认就是动态存储变量,如int b = 1;(如果是全局变量则于是静态存储.)内存存储空间的分配:1. 动态存储区域:即存储⽤动态存储⽅式的变量的内存区域,如函数形参,没有加static前缀的局部变量(即动态局部变量),函数返回地址2. 静态存储区域:即存储⽤静态存储⽅式的变量的内存区域,如全局变量,静态全局变量.(没有动态全局变量)3. 程序区:存放程序语句.变量的作⽤域:局部和全局.1. 全局变量:在所有函数外定义(包含主函数),所有函数均能调⽤.全局变量都是静态存储,没初始化时默认为0;2. 局部变量:函数内部定义,只适⽤于当前函数.没初始化时,若是静态存储,则为0,若是动态存储,则为随机值.静态全局变量和全局变量的区别?1. 注意,它们都是静态存储,不存在动态存储变量.主要是作⽤域不同.静态全局变量只适⽤于当前⽂件,初始值为0;2. ⽽全局变量可以extern在其他⽂件使⽤.若同时出现两个相同变量名的不同类型变量,作⽤域⼩的起作⽤.初始值也为0;静态局部变量和(动态)局部变量的区别?1. 作⽤域相同,但内存释放周期不同.动态局部变量当函数执⾏结束后,就释放内存.下次在调⽤时⼜可以对其初始化.初始值为随机数.2. ⽽静态局部变量则在整个程序中都不会释放内存,下⼀次调⽤时还是上⼀次的值.初始值为0;为什么静态存储未初始化时,初始值为0,⽽动态则为⼀个随机数?。
65535在c语言中的二进制储存-回复“65535在C语言中的二进制储存”在C语言中,整数类型的变量通常以二进制形式储存。
而对于一个非负的整数数值65535来说,它可以用16位的二进制数来表示。
本文将详细介绍65535在C语言中的二进制储存过程,并逐步解释每个步骤。
首先,我们知道二进制数是以2为底的数字系统,只有两个取值:0和1。
因此,要表示一个数字,我们需要将其以2为基数进行拆分,并根据其每一位的权重来计算其十进制值。
而65535的二进制表示如下:1111 1111 1111 1111从右至左,每一位的权重分别为2^0、2^1、2^2、2^3、...、2^15。
因此,我们可以将16个位分别标记为bit0、bit1、bit2、bit3、...、bit15。
对于bit0所代表的最低位,它的权重是2^0,所以其对应的二进制位是1。
同样地,bit1的权重是2^1,所以其对应的二进制位也是1。
以此类推,直到bit15的权重是2^15,其对应的二进制位也是1。
接下来,我们将进一步解释每个二进制位的意义。
从右至左,bit0到bit15依次表示数字的低位到高位。
其中,bit0是最低位,我们通常称之为"最低有效位"(LSB, Least Significant Bit)。
bit15是最高位,我们称之为"最高有效位"(MSB, Most Significant Bit)。
对于65535来说,它的16个位中的所有bit都是1,这意味着它在16位的二进制系统中已经达到了最大值。
现在,让我们来考虑如何在C语言中声明一个可以储存65535的变量。
在C语言中,我们可以使用不同的整数类型声明变量,如"short"、"int"、"long"等。
对于我们要表示的数值65535,我们可以使用"unsigned short int"类型。
function一、变量1.什么是变量变量是存放的是实质的东西,并且因存放的东西不同而分类不同:有单位、区域、触发器等变量——这样说吧,就像容器,放水的叫杯,盛饭的叫碗,装屎的叫马桶。
因分类不同,所以你不能让一个变量储存与它类型不同的东西,譬如你不能用单位变量来保存地图上一个区域,就像你不能用马桶给客人盛饭。
2.不同变量类型的转换虽说变量不能储存与它类型不同的东西,但变量的类型,其实是可以改变的。
我们在T 里,看到―将一个整数转换成实数‖,―将一个整数转换成字符窜‖等等;WE里提供了三种变量类型之间的自由转换——整数,实数,字符窜;就像我们可以用杯子装饭,拿碗装水一样。
不知不觉便说到我们的周星星同学了,因为有人看到他居然拿马桶吃饭;这是怎么回事?原来有个Return Bug,利用系统漏洞可以实现任意两个变量类型之间的转换。
由于周星星是个特工,他的皮鞋,其实是吹风机,他的电话,还是吹风机,也就是说,由于职业需要,他把他的东西做了改装,以麻痹敌人。
所以,他拿的马桶也不是真的马桶,那其实是个饭盒,外观像马桶而已。
所以当周星星拿着马桶去厕所,别人以为他是去便便,其实他是去吃饭。
关于Return Bug,将在后面着重单独列出来讲。
3.全局变量与局部变量变量是容器,这里我们拿杯子来说明全局变量与局部变量的区别。
全局变量就像一个玻璃杯,不可能两个人同时使用,使用完下次可继续使用;局部变量则像一叠一次性纸杯,同时可以满足很多任何水的需要,并且使用完纸杯就丢掉,即便你有Sars也不怕传染给别人。
一般而言,由于程序在执行时,速度很快,因此多个T使用同一个全局变量,出错的概率很小;但,一旦T里有等待,情况就不妙了。
就像用杯子喝水,如果你是一口气把水喝完,然后把杯子放回原处给下一个人用,没什么问题;但如果你喝一小口,歇半天,再喝下一口,就出问题了——如果这时,另外有人也要用这杯子,那么,你跟他将轮流喝杯子里的水——很有断臂山的感觉。
动态储存⽅式和静态储存⽅式变量从存在的时间(⽣存期)⾓度来分,可以分为动态储存⽅式和静态储存⽅式。
所谓静态存储⽅式是指在程序运⾏开始时由系统分配固定的储存空间的⽅式。
动态储存⽅式则是在程序运⾏期间根据需要进⾏动态的分配储存空间的⽅式。
存储空间分为3部分:(1)程序区(2)静态存储区(3)动态存储区。
在C语⾔中,每⼀个变量和函数都有两个属性:数据类型和数据的存储类别。
对数据型(如整型,字符型等):储存类别指的是数据在内存中的储存⽅式。
具体包含四种:⾃动的(auto),静态的(static),寄存器的(register),外部的(extern)。
根据变量的储存类别,可以知道变量的作⽤域和⽣存期。
1、auto变量函数中的局部变量,如不专门声明为static储存类别,都是动态的分配存储空间(栈),数据存储在动态存储区中。
函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类,在调⽤该函数时,系统会给它们分配存储空间,在函数调⽤结束时,⾃动释放这些存储空间。
例:int f(int a) /*定义为f函数,a为形参*/ { auto int b,c=3; /*定义b,c为⾃动变量*/ }关键字auto可以省略,auto不写则默认为“⾃动存储类别”。
2、⽤stastic声明局部变量有时希望函数中的局部变量的值在函数调⽤结束后不消失,即存储单元不释放。
这时就应指定局部变量为“静态局部变量”,⽤static进⾏声明。
例:#include <stdafx.h>#include<stdio.h>int f(int a){auto b=0;static int c=3;b=b+1;c=c+1;return(a+b+c);}void main(){int a=2,i;for(i=0;i<3;i++){printf("%d\n",f(a));}}说明:(1)静态局部变量属于静态存储类别,在静态存储区内分配存储单元。
习题6 参考答案一、选择题6.1 C 分析:全局变量有效范围是从定义的位置开始到所在源文件的结束,在这区域内的函数才可以调用,如果在定义函数之后,定义的变量,该变量不能被之前的函数访问所以C选项说法错误。
6.2 D 分析:auto变量又称为自动变量,函数定义变量时,如果没有指定存储类别,系统就认为所定义的变量具有自动类别,D选项正确。
static变量又称为静态变量,编译时为其分配的内存在静态存储区中。
register变量又称为寄存器变量,变量的值保留在CPU的寄存器中,而不是像一般变量那样占内存单元。
当定义一个函数时,若在函数返回值的类型前加上说明符extern时,称此函数为外部函数,外部函数在整个源程序中都有效。
6.3 A分析:auto用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。
这个关键字通常会被省略,因为所有的变量默认就是auto的。
register定义的变量告诉编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。
static变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。
这一点是它与堆栈变量和堆变量的区别。
变量用static告知编译器,自己仅仅在变量的作用范围内可见。
这一点是它与全局变量的区别。
当static用来修饰全局变量时,它就改变了全局变量的作用域。
extern 限制在了当前文件里,但是没有改变其存放位置,还是在全局静态储存区。
extern 外部声明, 该变量在其他地方有被定义过。
6.4 C 分析:auto:函数中的局部变量,动态地分配存储空间,数据存储在动态存储区中,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。
register:为了提高效率,C语言允许将局部变量的值放在CPU中的寄存器中,这种变量叫"寄存器变量",只有局部自动变量和形式参数可以作为寄存器变量。
JAVA学习(⼀)——基本语法 tips:前端开发写惯了弱类型语⾔,再来学强类型语⾔,真的是被各种修饰符、类型声明给整的云⾥雾⾥,⽽且java语法和javascript语⾔差别还是很⼤的,所以做好笔记,把⼀些需要注意的地⽅记下来是⾮常重要的,接下来就开始学习java啦。
⼀、基本语法: 1、⼤⼩写敏感:Java是⼤⼩写敏感的,这就意味着标识符Hello与hello是不同的。
2、类名:对于所有的类来说,类名的⾸字母应该⼤写。
如果类名由若⼲单词组成,那么每个单词的⾸字母应该⼤写,例如 MyFirstJavaClass 。
3、⽅法名:所有的⽅法名都应该以⼩写字母开头。
如果⽅法名含有若⼲单词,则后⾯的每个单词⾸字母⼤写。
4、源⽂件名:源⽂件名必须和类名相同。
当保存⽂件的时候,你应该使⽤类名作为⽂件名保存(切记Java是⼤⼩写敏感的),⽂件名的后缀为.java。
(如果⽂件名和类名不相同则会导致编译错误)。
5、主⽅法⼊⼝:所有的Java 程序由public static void main(String args[])⽅法开始执⾏。
备注⼀下: 5.1、public static void main(String args[]){}:为java主函数,java虚拟机会⾃动寻找到main⽅法,然后开始执⾏后⾯的程序,java程序的规定的格式写法; 5.2、public:可外部访问; 5.3、static:标记为静态函数,将该函数存储在静态存储区,不需要实例化(new)即可使⽤; 5.4、void:⽆返回值; 5.5、String args[]:可在命令⾏通过此参数给函数传值,可在其他类调⽤这个类的main函数时传值。
public class MyFirstJavaProgram {/* 第⼀个Java程序.* 它将打印字符串 Hello World*/public static void main(String []args) {System.out.println("Hello World"); // 打印 Hello World}} ⼆、类(class) 1、局部变量 2、成员变量:定义在类中,⽅法体之外的变量,和局部变量略有不同。
(1)自动型(堆栈型)auto
内部变量省略存储类型符:内部变量是指在函数内部定义的变量。
在函数或复合语句中定义变量时省略存储符,系统默认所定义变量的存储类型是自动型。
自动型所在存储区域:存储类型是自动型的变量,存储在系统内存的堆栈区。
栈区分配存储区域,函数调用结束时,C语言就释放变量,节省内存空间。
释放变量:从内存堆栈区中收回分配给变量的存储空间。
变量的初始化:可以对变量初始化,如果在定义变量时不初始化,还要用赋值语句或各种输入数据的方法给其赋值。
程序调用函数是,执行自动型变量数据定义语句,则系统为其在内存堆栈区分配存储菜单元,放入数据,函数结束时释放存储单元。
如果再一次调用所在函数,则重新为其在内存堆栈区分配存储单元,放入数据,函数结束时再一次释放存储单元。
(2)寄存器型register
所在存储区域:CPU通用寄存器
寄存器型变量的数量:通用寄存器在CPU中,数量很少。
通用寄存器在CPU中有很多特定的用途,所以寄存器型变量通常最多只允许2个,定义4字节或4字节以上的变量,通常不定义成寄存器型。
因此long,fioat,double,unsingedlong等其存储类型都不定义成寄存器型。
寄存器型变量过多的处理方式:如果在数据定义语句中的寄存器数量过多,所占用寄存器数量超过了所能提供寄存器的数目,编译系统将多余的寄存器变量改为自动型变量。
存储空间的存在:寄存器型变量只能在函数中定义,运行到数据语句,则为变量在CPU 通过寄存器中为其分配内存,退出函数将释放所占用寄存器。
变量的初始化:可以对变量初始化,如果在定义变量时不初始化,则以后要用赋值语句或各种输入数据的方法给其赋值。
程序调用函数时,执行寄存器型变量数据定义语句,则系统为其在寄存器配存储单元,放入数据。
函数结束时释放存储单元。
如果再一次调用所在函数,则重新为其在寄存器分配存储单元,放入数据,函数结束时再一次释放存储单元。
(3)静态型static
所在存储区域:存储类型是静态型的变量,存储在系统内存的数据区。
存储空间的存在:程序进入静态型变量的数据定义语句,则系统为其在内存数据区分配存储单元,放入数据。
函数结束时也不释放存储单元,但不能使用。
再一次进入所在函数或复合语句,变量中的数据保持不变,直到程序结束时才释放存储单元。
变量的初始化:可以对其进行初始化,或以其他方式对其赋值,程序第一次进入其所在函数时,为其分配内存,并给其数据,退出该函数后,变量的数据不变,再一次进入这个函数时,变量中的数据是上次退出这个函数时的数据。
(4)外部参照型extern
外部参照型的作用:用于多个函数之间或多个编译单位之间传递数据,出现在变量声明语句中。
所在存储区域:存储类型是外部参照型的变量不同于其他变量,它是告知编译系统,这个变量是本函数之外定义的一个变量。
因此,所在的储存区域决定于另一个程序对应变量的储存类型。
存储空间的存在:存储空间的分配和释放,决定于变量定义时的类型。
变量的初始化:由于外部参照型变量实际上是另一个程序的对应变量,所以,不允许对外部参照型变量本身初始化。