No.3十六届蓝桥杯备战|数据类型长度|sizeof|typedef|练习(C++)

数据类型⻓度

每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不同,存储的数据范围就有所差异。

sizeof操作符

sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算特定数据类型的⻓度的,单位是字节。

sizeof 操作符的操作数可以是类型,也可是变量名或者表达式, sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。

c++ 复制代码
sizeof (类型)  
sizeof 表达式

sizeof 的计算结果是 size_t 类型的, size_t 指的是⽆符号整数(该类型包含了所有可能的unsigned int , unsigned long , unsigned long long 等类型,具体是取决于编译器的)。

c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
	int a = 100;

	cout << sizeof (a) << endl;
	cout << sizeof a << endl;
	cout << sizeof (int) << endl;

	return 0;
}
各数据类型⻓度
c++ 复制代码
#include <iostream>  
using namespace std;  

int main()  
{  
	cout << sizeof(char) << endl;  
	cout << sizeof(bool) << endl;  
	cout << sizeof(short) << endl;  
	cout << sizeof(int) << endl;  
	cout << sizeof(long) << endl;  
	cout << sizeof(long long) << endl;  
	cout << sizeof(float) << endl;  
	cout << sizeof(double) << endl;  
	cout << sizeof(long double) << endl;  
	
	return 0;  
}

C/C++标准规定,sizeof(long) >= sizeof(int)

根据编译器的不同,sizeof(long)可以是4也可以是8

使⽤这些数据类型可以向内存申请空间(就是创建变量),不同的数据类型⼀次性申请的空间⼤⼩是有差异的。

各类型取值范围

不同的数据类型所创建的变量的⻓度是有差异的,这个⻓度差异⼜决定了,这种变量中能存储的值的⼤⼩。

其实每⼀种数据类型有⾃⼰的取值范围,也就是存储的数值的最⼤值和最⼩值的区间,有了丰富的类型,我们就可以在适当的场景下去选择适合的类型。

类型 取值范围 速记最小值 速记最大值
char -128~127 CHAR_MIN -2^7 CHAR_MAX 2^7-1
unsigned char 0~255 0 UCHAR_MAX 2^8-1
short -32878~32767 SHRT_MIN -2^15 SHRT_MAX 2^15-1
unsigned short 0~65535 0 SHRT_MAX 2^16-1
int -2147483648~2147483647 INT_MIN -2^31 INT_MAX 2^31-1
unsigned int 0~4294967295 0 UINT_MAX 2^32-1
long -2147483648~2147483647 LONG_MIN -2^31 LONG_MAX 2^31-1
unsigned long 0~4294967295 0 ULONG_MAX 2^32-
long long -9223372036854775808~9223372036854775807 LLONG_MIN -2^63 LLONG_MAX 2^63-1
unsigned long long 0~18446744073709551615 0 ULLONG_MAX 2^64-1
为了代码的可移植性,和⽅便记忆,需要知道某种整数类型的极限值时,经常使⽤这些速记的符号。
limits.h ⽂件中说明了整型类型的取值范围。(C++中头⽂件的名字是 <climits>
float.h 这个头⽂件中说明浮点型类型的取值范围。(C++中头⽂件的名字是 <cfloat>
int 类型取值⼤概就是:-2.1*109~2.1*109,这⾥就是10^9这样的数量级。

typedef

在C++中有⼀个关键字是和类型有关的,是⽤来给类型重命名的。当有⼀个类型⽐较复杂的时候,可以简化类型。 typedef在竞赛中经常使⽤,可以提升编码速度。typedef使⽤的基本语法形式:

c++ 复制代码
typedef 旧类型名 新类型名;

EG:

c++ 复制代码
typedef unsigned int uint;  
typedef long long ll;  
typedef unsigned long long ull;

上⾯代码的意思是将 unsigned int 类型重命名为 uint ,使⽤ uint 创建的变量和使⽤unsigned int 是⼀样的,其他⼏个也是⼀样的道理。

c++ 复制代码
uint num1 = 0;  // 等价于 unsigned int num1 = 0;  
ll num2 = 0;    // 等价于 long long num2 = 0;  
ull num3 = 0;   // 等价于 unsigned long long num3 = 0;

练习

整数
c++ 复制代码
#include <iostream>  
using namespace std;  

int main()  
{  
	int a;  
	
	cin >> a;  
	cout << a;  
	
	return 0;  
}
B2018 打印字符 - 洛谷
c++ 复制代码
#include <iostream>  
using namespace std;  

int main()  
{  
	int n = 0;  
	cin >> n;  
	char ch = n;  
	cout << ch << endl;  
	
	return 0;  
}
c++ 复制代码
#include <iostream>  
using namespace std;  

int main()  
{  
	char ch = n;  
	cin >> ch;
	cout << ch << endl;  
	
	return 0;  
}

这种会出问题,比如输入65,因为变量是char类型的,cin会把6作为一个符号输入进去,最后只会打印一个6

"⼀个整数,即字符的ASCII码",那么就必须使⽤⼀个int类型的变量来输⼊数值。因为C++的 cin 是根据变量的类型在缓冲区读取数据的。换成 char 类型是不⾏的,虽然 char 类型的变量也是能存储这个ASCII值的。

倒序
c++ 复制代码
#include <iostream>
using namespace std;

int main()
{
    int a, b, c;
    cin >> a >> b >> c;
    cout << c << ' ' << b << ' ' << a << endl;
    
    return 0;
}

取值范围是0~2^31 -1,用int类型就可以

这里使用单引号字符空格或双引号字符串空格都可以

整型数据类型存储空间大小
c++ 复制代码
#include <iostream>  
using namespace std;  

int main()  
{  
	int n = 0;  
	short s = 0;  
	
	cout << sizeof(n) << " " << sizeof(s) << endl;  
	
	return 0;  
}
相关推荐
草莓熊Lotso25 分钟前
【数据结构初阶】--算法复杂度的深度解析
c语言·开发语言·数据结构·经验分享·笔记·其他·算法
KyollBM32 分钟前
【CF】Day75——CF (Div. 2) B (数学 + 贪心) + CF 882 (Div. 2) C (01Trie | 区间最大异或和)
c语言·c++·算法
海的诗篇_42 分钟前
前端开发面试题总结-JavaScript篇(二)
开发语言·前端·javascript·typescript
feiyangqingyun44 分钟前
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
c++·qt·udp·gb28181
CV点灯大师1 小时前
C++算法训练营 Day10 栈与队列(1)
c++·redis·算法
GGBondlctrl1 小时前
【leetcode】递归,回溯思想 + 巧妙解法-解决“N皇后”,以及“解数独”题目
算法·leetcode·n皇后·有效的数独·解数独·映射思想·数学思想
cccc来财1 小时前
Go中的协程并发和并发panic处理
开发语言·后端·golang
狐凄1 小时前
Python实例题:Python计算线性代数
开发语言·python·线性代数
武子康1 小时前
大数据-276 Spark MLib - 基础介绍 机器学习算法 Bagging和Boosting区别 GBDT梯度提升树
大数据·人工智能·算法·机器学习·语言模型·spark-ml·boosting
武子康1 小时前
大数据-277 Spark MLib - 基础介绍 机器学习算法 Gradient Boosting GBDT算法原理 高效实现
大数据·人工智能·算法·机器学习·ai·spark-ml·boosting