当前位置: 首页 > news >正文

[C语言] 数据存储

类型意义:

        1.类型决定内存空间大小(大小决定了使用范围)

        2.如何看待内存空间的视角

类型分类

        整形

类型大小(字节)
short2
int4
long4
long8

        浮点型

类型大小(字节)
float4
double8
long double12

        构造类型

数组
结构性struct
联合union
枚举enum

         指针类型

         空类型

                void(表示空类型,无返回值)

原码、反码、补码

  •         计算机中的整形有符号数表示方法为 原码,补码,反码.
  •         均为符号位和数值位两部分,符号位都是用0表示"正",用1表示"负",首位为符号位
  •         三种表示方法各不相同
  •         无符号数 : 原码,反码,补码均相同.
  •         计算机存储的是 补码(可以将符号位和数值域统一处理,加法和减法统一处理,因为cpu只有加法器), 反码=补码-1,原码=反码按位取反,特殊的补码 10000000,原码为 -128
  • 无符号类型  unsigned    有符号  signed

原码:

        直接将二进制转按照正负数的形式 换为二进制就可以

反码

        原原码符号位不变,其他位依次按位取反即可

补码

        反码+1即可·

比如 : 

 int a=20;// 4字节 32bit

原码: 00010100(8个数表示20, 前面再加24个0)

补码,反码与 原码相同

int b=-10;//4字节 32bit

原码: 0000  1010(8个数表示10,前面加23个0,最前面符号位为1)

反码: 1111   0101(前面加23个1,最前面符号位为1)

补码: 1111(等于15)   0110(反码+1)

转换16进制位(4个2进制位转换为1个16进制位)   补码转换16进制:0x ffffff6

大小端介绍

什么是大小端:

大端(存储):  指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中

小端(存储):  指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中

低地址:   编号小的   

高地址 :  编号大的

如  0x  11 22 33 44   

地址: 由低到高

数据: 由高到低

        44为数据低位  ,  11为数据高位

        44为内存高地址  ,  11为内存低地址

大端存储:11 22 33 44(人为)

小端存储:44 33 22 11(计算机)

//判断当前字节序:

//思路: 内存以16进制存储,如果第一个字节为 相对应16进制数,就为小端存储 ,否则为大端.
//比如 int a =1;  16进制为 01 00 00 00 (小端)
//利用 char* 来 访问一个字节的内容,指针类型决定访问几个字节的数.

//代码如下:
 

int check()
{
int a=1;
return *(char* )&a;
// 取出a的地址,并把强制转换类型 为 char*(因为只需要访问字节),再解引用得到其中的数,并返回
}int main()
{
//返回1,小端
//返回0,大端int ret=check_sys();
if(ret==1)
{printf("小端");
}
else
{
printf("大端");
}}

例题1:

main()
{//数都为 -1,没赋值前补码都一致char a = -1;//原码:10000000000000000000000000000001//补码:11111111111111111111111111111111//输出为int.整形提升(按符号位补高位)//得补码:11111111111111111111111111111111(32)//为负数,原码输出还是 -1signed b = -1;//和a同理unsigned c = -1;//补码:111111111111111111111111 11111111//因为赋值类型为unsigned ,最高位为0,整形提升(按符号位补高位),//得新补码:0000000000000000000000 11111111(32)//此时为整数, 原反补码一致 为255printf("%d %d %d", a, b, c);}

例题2:

main(){//数都为 -1,没赋值前补码都一致char a = -128;//原码:100000000000000000000000 10000000//补码:111111111111111111111111 10000000//因为赋值类型为char.认为1为符号位(按符号位补高位)//得新补码:111111111111111111111111 10000000(32)//%u打印 打印十进制无符号数., 原反补码一致 为111111111111111111111111 10000000printf("%u", a);}

char 分析: 

有符号 char范围 : -128------127

无符号 char范围:   0-------255

有符号字符类型范围图:

例题3: 

main(){char a = 128;printf("%u", a);char b =- 128;printf("%u", b);
//输出一致
// a存不了128, 可以表示为 127+1=-128}

 例题4:(无符号 与 有符号 计算)

    

int i=-20;
unsigned j=10;
printf("%d",i+j);//-20的 补码
11111111 11111111 11111111 11101100 //10的 补码
000000 0000000 0000000 00001010结果:
11111111 1111111 11111111 11111010 补码
11111111 1111111 11111111 11110110 反码
00000000 0000000 00000000 00001001 原码  -10 

    例题5: (-1 补码 与  无符号数)

unsigned int i;
for(i=9;i>=0;i--)
{printf("%d",i)
}//无限循环//当循环到 -1 时,由于-1补码全为1, 赋值给i, i为 无符号数,修改最前面的1为0 ,将会变为一个超大的数.

例题6: (字符类型范围)

char a[1000];
int i;
for(i=0;i<1000;i++)
{a[i] = -1 - i;}
printf("%d", strlen(a));//参考上图 字符类型取值范围图,  
//当-1,-2.....到-128是,下一个数 为127,126,125.....,知道0,停止存储.
//字符类型范围 -128到127

例题7:

	unsigned char a[1000];int i;for(i=0;i<=255;i++){printf("hello");}//无符号数 取值范围 0-255 , 当i为255+1 时, 将会变为 0,从而无限循环

浮点 类型:

基础知识:

不带任何后缀的浮点型变量 默认double , 以f(F).l(L) 分别表示 float 和 long double 

float 表示 6个有效字符 , double 表示 15个 , long double 表示 18个.

浮点型 字面量,有且只有一个小数点,两侧至少一边有数字.

指数形式:

e(E)为底 为  十进制指数 如:2.87e-3  ,

以0x(0X)打头,p(P)分隔的 是以 2为底数的 16进制指数  如:0x2p3=16.0

http://www.lryc.cn/news/316835.html

相关文章:

  • LoadBalancer负载均衡服务调用
  • YoloV8实战:YoloV8-World应用实战案例
  • Python 导入Excel三维坐标数据 生成三维曲面地形图(体) 5-1、线条平滑曲面且可通过面观察柱体变化(一)
  • cmake初识
  • Swift 入门学习:集合(Collection)类型趣谈-下
  • nova 12 LTPO来了!LTPO动态自适应刷新率屏120Hz体验更流畅 ,1Hz阅读更省电
  • 【rk3368 android6.0 恢复出厂设置功能】
  • 闲聊电脑(7)常见故障排查
  • Vim 编辑器|批量注释与批量取消注释
  • Android 使用AIDL HAL
  • C++的一些基础语法
  • mysql 技术100问?
  • APK漏洞扫描工具
  • ReactNative项目构建分析与思考之react-native-gradle-plugin
  • LeetCode454 四数相加
  • Kafka消费者重平衡
  • 【线代基础】张量、向量、标量、矩阵的区别
  • 用chatgpt写论文重复率高吗?如何降低重复率?
  • 字节跳动也启动春季校园招聘了(含二面算法原题)
  • 二,几何相交---4,BO算法---(3)数据结构
  • 中间件MQ面试题之Kafka
  • Prometheus 安装部署
  • 龙芯杯赛道-学习过程记录
  • 76. 最小覆盖子串-力扣hot100(C++)
  • vue的生命周期有那些
  • OpenStack安装步骤
  • 如何借助CRM系统获得直观的业务洞察?CRM系统图表视图解析!
  • 制作图片马:二次渲染(upload-labs第17关)
  • XGB-20:XGBoost中不同参数的预测函数
  • websocket 使用示例