一、C/C++ 中有哪些基本数据类型?它们的存储大小和取值范围是多少?
C/C++ 中基本数据类型:char、short、int、long、long long、float、double、bool。
字节:byte;位:bit。
1.字符型 char:所占内存大小:1 byte = 8 bit;
取值范围:-128 ~ 127; (-2^7 ~ 2^7-1)
2.短整型 short:所占内存大小:2 byte = 16 bit;
取值范围:-32768 ~ 32767;(-2^15 ~ 2^15-1)
unsigned short:所占内存大小:2 byte = 16 bit;
取值范围:0 ~ 65535(0 ~ 2^16-1)
3.整型 int:所占内存大小:4 byte = 32 bit;
取值范围:-2147483648 ~ 2147483647;(-2^31 ~ 2^31-1)
unsigned int:所占内存大小:4 byte = 32 bit;
取值范围:0~4294967295;(0 ~ 2^32-1)
4.长整型long:所占内存大小:(32位系统下)4 byte = 32 bit;
取值范围:-2147483648~2147483647;(-2^31 ~ 2^31-1)
(64位系统下)8 byte = 64 bit;
取值范围:(-2^63 ~ 2^63-1);
unsigned long: 所占内存大小:4 byte = 32 bit;
取值范围:0~4294967295;(0 ~ 2^32-1)
5.long long:所占内存大小:8 byte = 64 bit;
取值范围:(-2^63 ~ 2^63-1);
6.单精度float: 所占内存大小:4 byte = 32 bit;
1bit(符号位) 8bits(指数位) 23bits(尾数位)
取值范围:3.4E-38~3.4E+38;
7.双精度double:所占内存大小:8 byte = 32bit;
取值范围:1.7E-308~1.7E+308;
float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
8.bool 所占内存大小:1 byte = 8 bit;
取值范围:0 或 1 表示逻辑上的假或真。
二、什么是常量和变量?它们在 C/C++ 中有哪些区别?
1.变量
变量是程序中用于存储数据值的标识符,在程序执行过程中它的值是可以改变的,每个变量都有一个数据类型,它定义了变量存储的数据种类以及占用的空间大小,一个变量实质上代表了内存中的某个存储单元。变量还分为局部变量和全局变量,局部变量:在函数内声明的变量,只能在其声明的函数内访问。全局变量:在所有函数外部声明的变量,可以在程序的任何地方访问。还有通过static关键字产生的静态局部变量和静态全局变量改变了变量的作用域和生命周期。
2.常量
常量是一种在程序定义后其值不能被修改的标识符。在C语言中,常量可以是直接量(如字面常量5
、'a'
),也可以是通过#define
预处理指令或使用const
关键字定义的命名常量。常量有整数常量、浮点常量、字符常量、字符串常量、地址常量等。
3.常量和变量在 C/C++ 中的区别
在 C / C++ 中常量都必须在定义时初始化,且初始化后其值不能改变。
在 C / C++中,变量可以在定义时初始化,也可以在后续的程序执行过程中被修改。