当前位置:网站首页>C语言--数据的存储(上)
C语言--数据的存储(上)
2022-08-09 23:38:00 【zeroGho】
一、数据类型
整形:
char:
unsigned char
signed char
short:
unsigned short
signed short
int:
unsigned int
signed int
long:
unsigned long
signed long
浮点型:
float
double
自定义类型
数组
结构体 struct
枚举 enum
联合 union
指针
int*
char*
float*
void*
空类型
void
二、整形在内存的存储
整形在内存中占4个字节的空间,以二进制的形式存储,具体又有原码,反码,补码的区别
2.1 原码,反码,补码
正数的原、反、补码都相同。
负整数的三种表示方法各不相同
原码:直接将数值按照正负翻译为二进制数
反码:原码符号位不变,其他位取反
补码:反码+1
数据在内存中存储的其实是数据的补码
例如:
如图,数据在内存的存储确实为补码,但顺序有所不同
2.2 大小端字节序
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。
2.3 练习
我们来做几个简单的练习熟悉下整形的存储
练习一:
#include <stdio.h>
int main()
{
char a= -1;
signed char b=-1;
unsigned char c=-1;
printf("a=%d,b=%d,c=%d",a,b,c);
return 0;
}
运行结果:
解析:
char a = -1;
-1:原码 10000000000000000000000000000001
反码 11111111111111111111111111111111110
补码 11111111111111111111111111111111111
但a是char类型,只有一个字节因此要截断,最后只留下 11111111 存入a中
同理 b和c中存的也是 11111111
在打印时,以整形打印a和b,先整形提升,由于a和b都是有符号字符类型,高位补符号位
11111111-->11111111111111111111111111111111-->打印-1
c 是无符号字符型,高位补0
11111111-->000000000000000000000011111111-->打印255
练习二:
#include <stdio.h>
int main()
{
char a = -128;
char b = 128;
printf("%u %u\n", a, b);
return 0;
}
运行结果:
128 :0000 0000 0000 0000 0000 0000 1000 0000
-128:1000 0000 0000 0000 0000 0000 1000 0000
128补码与原码相同
-128补码:1111 1111 1111 1111 1111 1111 1000 0000
存储时截断,a = 1000 0000 b = 1000 0000
无符号整形打印时,先整形提升,补符号位,再按照无符号整形打印
a = 1111 1111 1111 1111 1111 1111 1000 0000
b = 1111 1111 1111 1111 1111 1111 1000 0000
而上面这个二进制数转换为十进制就是 4,294,967,168
边栏推荐
猜你喜欢
分布式数据库难题(三):数据一致性
基于 LSTM 的分布式能源发电预测(Matlab代码实现)
【问题解决】训练和验证准确率很高,但测试准确率很低
源码编译安装LAMP和LNMP
Golden Warehouse Database KingbaseGIS User Manual (6.4. Geometry Object Access Function)
Leetcode82. 删除排序链表中的重复元素 II
工程 (七) ——PolarSeg点云语义分割
为什么不建议你在 Docker 中跑 Mysql ?
mysql无法远程连接 Can‘t connect to MySQL server on ‘xxx.xxx.xxx.xxx‘ (10060 “Unknown error“)
GoLang 使用 goroutine 停止的几种办法
随机推荐
分布式数据库难题(三):数据一致性
源码编译安装LAMP和LNMP
Redis-基本介绍/linux下环境配置/配置文件
Project (7) - PolarSeg point cloud semantic segmentation
go语言的并发原理(goroutine)
二进制、八进制、十进制、十六进制之间的转换
[C language] Address book "Static Memory Version"
重估HR SaaS:一体化后的新三年
Redis 非关系型数据库学习(一) ---- Redis 的安装
博弈小游戏
YOLOV5学习笔记(七)——训练自己数据集
【渗透工具】浏览器数据导出工具
2022中高级Android面试题汇总来助你通过面试
router路由
阿里云短信服务开通
网络协议05 -网络层
数字孪生智慧制造生产线项目实施方案,平台认知与概念
E - Sugoroku 3(期望dp)
Eureka自我保护
FreeRTOS任务基础