c语言存储数据的方式,c++ 数据存储
Yyds干货库存
一.数据类型
基本类型
打印类型
大小(字节)
字符类型
%c
一个
短整数
%d
2
Int整形
%d
四
长塑料
%ld
四
longer较长的形状
%lld
八
浮点单精度浮点型
%f
四
双浮点型
%lf
八
类型的含义:
使用此类型来打开内存空间的大小(大小决定使用范围)。如何看待内存空间的角度?简单分类:
整数族
茶
//(直接用char类型,不确定是无符号还是有符号,看编译器,一般是有符号类型)
//存储//char时,存储的是它的ASCII码值,也是整数,所以属于塑料家族。
无符号字符
有符号字符
短(带符号的短)
无符号短整型[int]
有符号短[int]
int(有符号整数)
无符号整数
有符号整数
长(长签名)
无符号长整型[int]
有符号长整型浮点族
漂浮物
双结构类型-定制类型
数组类型
结构类型结构
枚举类型枚举
联合类型联合指针类型
int * pi
char * pc
float * pf
void * pv空类型
空的
Void表示空类型(无类型)
(通常应用于函数的返回类型、函数的参数、指针类型)
二。形状在记忆中的存储
(补码以相反的顺序存储在内存中)
之前已经讲过将表单存储在整数内存中,这里就不多说了。
图中是十六进制形式,四个二进制位换一个十六进制位。
a的补码的十六进制形式是FFFFFFF6。
注意:对于整形手术:
1.数据用补码存储。
2。表达式计算由补码计算。
3.打印并显示原始代码。
示例:
#包含stdio.h
int main()
{
char a=-1
//因为char是1个字节
//所以是1111111存储在a中。
有符号char b=-1;
//11111111
无符号字符c=-1;
//11111111
printf(a=%d,b=%d,c=%d ,a,b,c);//a=-1,b=-1,c=255
//打印为%d,将整数提升。
//整形升级看原符号位。
//a因为是char,所以通过符号位提升。
//a:111111111111111111111111111111111111111111111111内存内补
//在%d中打印时,你看它的原始代码,所以是100000000000000000001。
//a和b类似。
//提升有符号整数时,符号位将被视为最高位。
//ab:原代码1000 0000 0000 0000 0000 0000 0000 0000 0001-1
//c: 0在提升无符号整数后添加。
//C:000000000000000000001111111-无符号C的补码。
//C:0000000000000000000001111111-无符号C的原始代码。
返回0;
}
1.*****
//%u是打印的无符号整数,认为存储在内存中的补码对应的是无符号数。
//%d是打印的有符号整数,认为存储在内存中的补码对应一个有符号数。
#包含stdio.h
int main()
{
char a=-128;
//a的补码:1111 1111 1111 1111 1111 1111 1111 1111 1000 0000
//截断后为:1000 0000
//因为是%u打印,所以发生整形提升,也是有符号的char,高位用1填充。
//升级后,内存中有一个补码,而且是无符号数补码,高位不是符号数。它的补码和原码是一样的——1111 1111 1111 1111 1000000。
printf(%u\n ,a);//4294967168//% d为是时,结果为-128。
返回0;
}
2.2.char的取值范围
答:有符号字符的取值范围:-128~127
27是最大值,加1不会变成128,但会是-128。
b:无符号字符的范围是0~255。
(无符号整形减为0时,还可以再减,但不会减为负数,而是减为最大无符号数,像循环一样。而无符号most Osuka 1变为0)。
示例:
#包含stdio.h
int main()
{
无符号int I;//没有符号表示I值不是负值。
for(I=9;I=0;我-)//恒成立。
{
printf(%u\n ,I);//当它是%d时,将认为存储器中存储了一个有符号的数。
}
返回0;
}
三。大小字节顺序的介绍与判断
Big-endian(存储)模式是指数据的低位存储在内存的高位地址,而数据的高位存储在内存的低位地址;
小端(存储)模式是指数据的低位存储在内存的低位地址,而数据的高位存储在内存的高位地址。
注意:右地址为低,左地址为高。
44是0x11223344中的低位地址。
int main()
{
int a=0x11223344
返回0;
}
答:11 22 33 44存储在内存中可以分为两种:
1:低11 22 33 44高-大端
2:低44 33 22 11高-小端
示例:判断当前机器的字节顺序
//可以通过获取第一个字节来判断
#包含stdio.h
int main()
{
int a=1;
char * p=(char *)a;
如果(*p==1)
Printf(小端\ n );
其他
printf( big end \ n );
返回0;
}
//函数方法
#包含stdio.h
int check_sys()
{
int a=1;
//0000 0000 0000 0000 0000 0000 0000 0001
//大端存储:0x0000001取消引用-0
//小型端存储:0x 01 00 00 00取消引用-1
return(*(char *)a);
//a取出A的地址,然后把这个int*类型的地址转换成char*,最后解引用。
//对于大端存储,返回0;小型存储,返回1
}
int main()
{
int ret=check _ sys();
if (ret==1)
Printf(小端\ n );
其他
printf( big end \ n );
返回0;
}
四。浮点型在内存中的存储
浮点系列:浮点型、双精度型、长双精度型
#包含stdio.h
int main()
{
int n=9;
float * pFloat=(float *)n;
printf( n的值为:%d\n ,n);//9
printf( * p float 的值为:%f\n ,* p float);//0.000000
//从浮点数的角度测试*pFloat时,在% f中打印。
* pFloat=9.0
printf( num的值是:%d\n ,n);//1091567616
//放浮点型,从整数角度取
//解释浮点数和整数在内存中的存储方式不同。
printf( * p float 的值为:%f\n ,* p float);//9.000000
返回0;
}任意二进制浮点数V的存储形式规则:(-1) S * M * 2 E。
(-1) s表示符号位,当S=0时,v为整数,当S=1时,v为负数。
M代表一个有效数字,1=M 2
2 e表示指数位。
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。