当前位置:网站首页>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
边栏推荐
猜你喜欢
随机推荐
Kubernetes服务接入Istio
游泳馆系统次卡的设置有哪些细节?
【数据存储】signed,unsigned到底怎么区分?如何计算?
字节技术面都过了,薪资都谈好了20K*13结果还是被刷了,问HR原因是。。。
聚焦热点 | ISC 2022软件供应链安全治理与运营论坛圆满落幕
dlopen failed: library “libtaml.so“ not found
断开和服务器共享连接的方法「建议收藏」
蔚来杯2022牛客暑期多校训练营7 CFGJ
JVM Memory and Garbage Collection - 10. Direct Memory
NTU General Database-Gbase-8a-Learning-04-Deploying Distributed Clusters
第十五章 mysql存储过程与存储函数课后练习
CST Studio Suite 2021软件安装包和安装教程
今日睡眠质量记录61分
go语言的并发原理(goroutine)
手把手教你编写性能测试用例
Fury:一个基于JIT动态编译的高性能多语言原生序列化框架
3.4 - 编译与解释 3.5 - 编译过程 3.8 - 文法
NotWritableError: The current user does not have write permissions when conda creates a new environment
NTP SERVICE TASK 在GWserver配置、启用NTP服务,为当前环境提供时钟同步服务,Client主机可以从该服务器同步时间。
LSTM-based distributed energy generation prediction (Matlab code implementation)