当前位置:网站首页>关于数据在内存中存储的相关例题
关于数据在内存中存储的相关例题
2022-06-25 12:35:00 【LIn_jt】
关于数据在内存中的存储例题
本文将讲解数据在内存中存储的相关例题
请看下面几道例题:>
例题一:
#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;
}
输出的结果为:>
整数在内存中存储4个字节, 而将-1存放在char类型的变量中,必然会发生截断, 因此,-1 在这三个变量中都是存放的这样的数据:
而我们打印的时候,以整型的形式来打印, 而这三个变量都为char类型, 因此,这三个变量会发生整型提升, 而整型提升是根据变量的类型来进行的。a进行整型提升时, char类型在vs编译器下默认为signed char类型, 因此, 上面全一序列中,最高位为符号位, 因此整型提升时, 前面补1,得到的序列为:
而打印的时候,以%d的形式来打印, 即以有符号的整型来打印, 因此,上面的全一序列最高位被认为是符号位,为负数, 因此,我们需要将其转化为原码之后进行打印, 转化后也即为-1,因此, 便打印出了-1, 而变量b也是相同的道理。
而c呢?,c与a, b不同的原因便出在整型提升时,变量c的类型为unsigned char, 因此,在整型提升的时候, 其八个1的二进制序列前面会补0,而不会补1.
例题2:
#include <stdio.h>
int main()
{
char a = -128;
printf("%u\n",a);
return 0;
}
输出的结果为:>
分析过程如下:>
也就与在vs环境底下跑出来的数据一样了。
现在我们思考一下, 如果把这里的char a = -128 改为char a = 128, 结果又是怎么样的呢?即
#include <stdio.h>
int main()
{
char a = 128;
printf("%u\n",a);
return 0;
}
其实结果也是和上面 一样的, 因为不管怎么样, 此时a中存放的二进制序列也为10000000, 因此分析结果与上题一样, 得到的结果也会与上题一样。
例题三:>
#include <stdio.h>
int main()
{
int a = -20;
unsigned int b = 10;
printf("%d\n", a + b);
return 0;
}
输出的结果为:>
这时就有同学会说, 哎呀, 这不是很简单的 -20 + 10 = -10吗, 其实,真正的计算结果是这样的:>
这就是计算机真正的计算过程。
下面我们来看例题4:>
#include <stdio.h>
int main()
{
unsigned int i;
for(i = 9; i >= 0; i--)
{
printf("%u\n",i);
}
}
程序输出的结果为:> 死循环
其实很好理解, 因为变量i为unsigned int, 无符号整型数据是必然>=0的。因此, 程序运行的结果为死循环。
例题5:>
int main()
{
char a[1000];
int i;
for (i = 0; i < 1000; i++)
{
a[i] = -1 - i;
}
printf("%d", strlen(a));
return 0;
}
输出的结果为:>
此处,我们需要了解到的是char类型存储数据的最大值和最小值, 因为char类型为一个字节,因此我们可以这样来理解
即:>
因此,对于上面的程序, 我们可以这么理解:.
因此就是我们的255了。
例题6:>
unsigned char i = 0;
int main()
{
for (i = 0; i <= 255; i++)
{
printf("hehe\n");
}
return 0;
}
运行的结果为死循环:>
为什么为死循环呢?其实是因为unsigned char 类似的数据范围在0 ~255之间, 因此永远符合循环条件,进入循环。
边栏推荐
- 重磅直播|BizDevOps:数字化转型浪潮下的技术破局之路
- 解析數倉lazyagg查詢重寫優化
- KDD 2022 | graphmae: self supervised mask map self encoder
- J2EE从入门到入土01.MySQL安装
- 量化交易之回测篇 - 期货CTA策略策略(TQZFutureRenkoWaveStrategy)
- torch.tensor拼接与list(tensors)
- [machine learning] parameter learning and gradient descent
- [flask tutorial] flask development foundation and introduction
- 买基金在哪里开户安全?还请赐教
- Uncover gaussdb (for redis): comprehensive comparison of CODIS
猜你喜欢
New Gospel of drug design: Tencent, together with China University of science and technology and Zhejiang University, developed an adaptive graph learning method to predict molecular interactions and
.NET in China - What's New in .NET
Conway's law can not be flexibly applied as an architect?
模块五(微博评论)
Serevlt初识
PPT绘论文图之导出分辨率
Maui的学习之路(二)--设置
Sword finger offer II 025 Adding two numbers in a linked list
A half search method for sequential tables
Online service emergency research methodology
随机推荐
Geospatial search - > R tree index
Summary of leetcode linked list problem solving skills
解析数仓lazyagg查询重写优化
nacos无法修改配置文件Mysql8.0的解决方法
My first experience of go+ language -- a collection of notes on learning go+ design architecture
Module 5 (microblog comments)
词法陷阱(C)
[Visio]平行四边形在Word中模糊问题解决
Elemtnui select control combined with tree control to realize user-defined search method
Optimization of lazyagg query rewriting in parsing data warehouse
1024水文
画图常用配色
KDD 2022 | graphmae: self supervised mask map self encoder
Seven competencies required by architects
Jenkins pipeline uses
Sword finger offer 04 Find in 2D array
AI assisted paper drawing of PPT drawing
Event triggered when El select Clear clears content
Qt鼠标跟踪
mysql导入导出数据到excel表日期出现问题