我们知道,在计算机中,最常见的存储单位就是字节,比如我们熟悉的int型数据,就是由4个字节构成的
我们可以在C++中通过以下代码获取各种数据类型的字节数
#include <iostream>
using namespace std;
int main(){
cout<<"int:"<<sizeof(int)<<endl;
cout<<"float:"<<sizeof(float)<<endl;
cout<<"char:"<<sizeof(char)<<endl;
cout<<"double"<<sizeof(double)<<endl;
cout<<"long:"<<sizeof(long)<<endl;
cout<<"long long:"<<sizeof(long long)<<endl;
cout<<"long double"<<sizeof(long double)<<endl;
cout<<"unsigned int:"<<sizeof(unsigned int)<<endl;
cout<<"unsigned char:"<<sizeof(unsigned char)<<endl;
}
运行结果为
各种数据类型的字节数有4,有8,也有16。在C++中,byte定义为unsigned char无符号字符。
那么,我们要如何用字节来表示其他数据呢?
比如整型数据4,它对应哪4个字节呢?
先来看一段代码
union dataunion {
unsigned char byte[sizeof(long double)];
double d;
float f;
long l;
int i;
long long ll;
} data;
首先要了解什么是union(联合),在这就不具体讲了,网上详解很多,它的功能是,当data中的其中一个数据被赋值时,其余所有数据都会被赋值,这么讲可能比较抽象,举个栗子,就是data中的i,也就是int型变量,被赋值比如是7时,data中的byte,d,f,l,ll,都会被同时赋值相应类型的5。
这样,我们就可以在byte数组中读取到4个字节,这4个字节就是int型整数的字节数
以下是完整代码
#include <iostream>
#include <stdio.h>
using namespace std;
union dataunion {
unsigned char byte[sizeof(long double)];
double d;
float f;
long l;
int i;
long long ll;
} data;
int main(){
int k = 2000;
data.i=k;
for(unsigned i=0;i<sizeof(int);i++){
printf("byte[%d] = %d\n", i, data.byte[i]);
}
}
结果
这里的k可以自由更改数据类型和数据值,就可以查看所有数据是由哪些字节构成的了