类型 变量 进制
Posted shuqing-cxw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类型 变量 进制相关的知识,希望对你有一定的参考价值。
一、类型
数据类型是程序的基础,决定了数据的意义,也决定了我们能在数据上所执行的操作。
从http://www.cnblogs.com/Shuqing-cxw/p/9189411.html 2文件的本质可以知道,数据类型可以理解为固定大小内存的别名;
不同的数据类型,用于应对各种不同的需要;最简单的例如加减法使用整数型,而除法可能需要浮点类型更符合实际;
在存储空间中,使用数据类型来向整个存储空间申请一个相应大小的内存块以供使用;
1.1 基本类型
- 内置类型包括了算术类型和空类型;
- 算术类型分为两类:整型和浮点型;
- 整型包括字符类型和布尔类型(C++);
1.2 自定义类型
- C语言中的结构体类型;
- C++语言中的类类型;
- C/C++的typedef关键字所定义的类型、枚举类型、联合/共用类型;
二、变量
通过使用数据类型来创建一些变量来形象具体的描述并操作这些固定大小的内存;
故可以看出,变量的本质就是一段实际连续存储空间的别名;即,所占用的内存大小同数据类型所占的空间大小,且变量需要依赖归属某个数据类型;
程序中通过变量来申请并命名某一存储空间;即术语中的声明
通过操作变量达到使用该存储空间的目的;
2.1 变量的定义
类型说明符 随后紧跟着由一个或多个变量名组成的列表,其中变量名以逗号分隔最后以分号结束;定义时可以为一个或多个变量赋初始值;
int sum, value; //声明并创建了sum和value变量,类型为int;
2.2 初始化变量
初始化变量就是为变量赋一个初始值。C/C++中,初始化在声明中完成,即只需要在变量名后面加上赋值运算符 = 和待赋给变量的值;
int sum = 0;
注意:初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,赋值的含义是把对象的当前值擦除,并以一个新值来替代。在声明变量时未进行初始化的变量所存储的数值是系统中所分配给该变量内存地址上的原值;
1 #include <stdio.h> 2 int main() 3 { 4 int n; 5 printf("n = %d ", n); 6 n = 5; 7 printf("n = %d ", n); 8 return 0; 9 }
三、进制
计算机通过关闭和打开状态组合来表示信息,用二进制非常方便,即用0和1表示,即比特序列,现代计算机普遍1byte使用8bit表示。
3.1 计算机中的八进制转二进制
- 8=2^3,即每个八进制位对应3个二进制位,按位拼接;
- 一个3位的八进制数可能要用9位二进制数来表示;
- 在C/C++中表示八进制数在其前面添加0标识
1 Example:0377→377(8) 2 7=111 3 3=011 4 故0377 = 1111 1111 5 说明八进制若标识比377还大的数需要2字节来表示;
3.2 计算机中的十六进制转二进制
- 16=2^4,即每个十六进制位对应4个二进制位,按位拼接;
- A=10,B=11,C=12,D=13,E=14,F=15
- 在C/C++中表示十六进制数在其前面添加0x或0X标识
1 Example: 0xA3F→A3F(16) 2 A=1010 3 3=0011 4 F=1111 5 故0xA3F = 0000 1010 0011 1111 6 2个十六进制位符号表示一个8位比特序列,故以十六进制很方便表示字节值
1.3 显示八进制和十六进制
1 /*C语言中显示不同的进制需要使用不同的转换说明: 2 *以十进制显示输出使用%d, 3 *以八进制显示输出使用%o或%#o(在数字前面显示进制代表符号) 4 *十六进制显示输出使用%x或%X或%#X; 5 */ 6 #include <stdio.h> 7 int main() 8 { 9 int i = 100; 10 printf("i_dec= %d, i_octal= %o, i_hex= %x ", i, i, i); 11 printf("i_dec= %d, i_octal= %#o, i_hex= %#x ", i, i, i); 12 return 0; 13 } 14 //C++显示输出示例 15 #include <iostream> 16 using namespace std; 17 int main() 18 { 19 int x = 100; 20 cout << "" << dec << x << endl 21 22 << "0" << oct << x << endl 23 24 << "0x" << hex << x << endl; 25 return 0; 26 }
小结:显然,八进制和十六进制记数系统在表达与计算机相关的值时比十进制方便,但需要主要的是使用不同的进制数是为了方便,不会影响数被存储的的方式,都是以二进制进行编码;
四、补充部分
4.1类型与变量的关系
1 //类型与变量的关系 2 /* sizeof关键字返回字节数表示所占的内存大小,sizeof(variable) 3 * printf()函数为C语言打印输出函数,printf("转换说明",变量); 4 */ 5 #include <stdio.h> 6 int main() 7 { 8 9 char c; 10 int i; 11 12 printf("sizeof(char) = %d, sizeof(c) = %d ", sizeof(char), sizeof(c)); 13 printf("sizeof(int ) = %d, sizeof(i) = %d ", sizeof(int), sizeof(i)); 14 15 return 0; 16 }
结论:
1.变量必然隶属于某个数据类型;
2.变量所占用的内存大小取决于所归属的数据类型;
4.2 变量声明与定义
C/C++支持分离式编译机制,即将程序分割为若干个文件,每个文件可被单独编译;
为实现支持该机制,C/C++语言将声明和定义区分开来,声明使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明,而定义则负责创建于变量名字关联的实体
变量声明规定了变量的类型和名字,定义相比声明还做了申请存储空间的动作,如果可能还会为变量赋一个初始值(取决于用户);
若想声明一个变量而非定义它,就在变量名前添加关键字 extern,且不需要显式初始化变量;
1 extern int i; //声明i,而非定义i 2 3 int i; //声明并定义i
注意:
任何包含了显式初始化的声明,在概念上都会转变为定义
当extern关键字标记的变量显式赋给了一个初始值,编译器将会报错,不允许用户这样声明定义;
1 //test.h 2 int n = 5; 3 4 //main.c 5 #include <stdio.h> 6 #include "test.h" 7 int main() 8 { 9 extern int n; 10 printf("n = %d ", n); 11 12 extern int n; 13 extern int n; 14 n = 6; 15 printf("n = %d ", n); 16 17 extern int n = 0; //error 18 return 0; 19 }
小结:变量能且只能被定义一次,但可以被多次声明;
4.3标识符
C++标识符由字母、数字、下划线组成,且必须以字母或下划线开头;标识符在发展至今一直区分大小写字母, 已放开了长度上的限制;
int somename, someName, SomeName, SOMENAME;//定义了4个变量
4.4 变量命名规范
- C++语言保留一些名字供语言本身使用,同时也为标准库保留了一些名字,如下操作符用户将不能用作标识符来声明定义
- 用户自定义的标识符不能连续出先两个下划线,也不能以下划线紧连大写字母开头;
- 定义在函数体外的标识符不能以下划线开头;
- 标识符要能体现实际含义,提高程序的可读性
- 变量名一般用小写字母,如index;
- 用户自定义的结构体或类名一般以大写字母开头,如,Student;
- 如果标识符由多个单词组成,则单词间应用下划线以明显的区分,如student_name;
//C++ 关键字 alignas continue friend register true alignof decltype goto reinterpret_cast try asm default if return typedef auto delete inline short typeid bool do int signed typename break double long sizeof union case dynamic_cast mutable static unsigned catch else namespace static_assert using char enum new static_cast virtual char16_t explicit noexcept struct void char32_t export nullptr switch volatile class extern operator template wchar_t const false private this while constexptr float protected thread_local const_cast for public throw //C++操作符替代名 and bitand compl not_eq or_eq xor_eq and_eq bitor not or xor
以上是关于类型 变量 进制的主要内容,如果未能解决你的问题,请参考以下文章
android.view.InflateException:二进制 XML 文件第 15 行:二进制 XML 文件第 19 行:膨胀类片段时出错