当前位置:网站首页>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
边栏推荐
猜你喜欢
随机推荐
ES6 Beginner to Mastery #15: Generator Usage
字节技术面都过了,薪资都谈好了20K*13结果还是被刷了,问HR原因是。。。
Redisson 分布式锁
收银管理软件如何做好员工管理?
The older tester has just passed the "hurdle" of being 35 years old, and I want to tell you something from my heart
【obs】obsqsv11 硬编 及与metartc codec对比
7. type( )函数——查询数据类型
ETCD快速入门-02 ETCD安装
无源晶振负载电容值CL匹配方法及说明
C language learning journey [operator (incomplete version)]
[Cloud native] Kubernetes orchestration tools
【云原生】Kubernetes编排工具精讲
CST Studio Suite 2021软件安装包和安装教程
【猜凶手,猜名次,杨辉三角】经典小学奥数的代码逻辑是什么?
聚焦热点 | ISC 2022软件供应链安全治理与运营论坛圆满落幕
Leetcode80. 删除有序数组中的重复项 II
算法---整数替换(Kotlin)
程序员从佩洛西窜访事件中可以学到什么?
Today's sleep quality record 61 points
信息系统项目管理师核心考点(六十四)信息安全基础知识重要概念








