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

[c语言日寄]赋值操作对内存的影响

在这里插入图片描述

【作者主页】siy2333
【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是进阶开发者,这里都能满足你的需求!
【食用方法】1.根据题目自行尝试 2.查看基础思路完善题解 3.学习拓展算法
【Gitee链接】资源保存在我的Gitee仓库:https://gitee.com/siy2333/study


文章目录

  • 前言
  • 题目引入
  • 分析
    • 向char类型中赋值int类型的98
    • 向char类型中赋值int类型的-1
    • 向char类型中赋值0x11-00-00-22
  • 总结


前言

在 C 语言中,赋值操作是最基础且频繁使用的操作之一。无论是简单的变量赋值,还是复杂的数据结构初始化,赋值操作都直接涉及到内存的分配、存储和访问。然而,许多初学者对赋值操作背后的具体的内存操作细节并不熟悉。

在本篇博客中,我们将通过具体的题目来深入探讨赋值操作对内存的影响,并通过实际代码示例和分析,帮助读者更好地理解 C 语言中的内存操作机制。


题目引入

#include<stdio.h>
int main() {

	char a;
	a = 98;
	printf("%c", a);

	return 0;
}

这是一个简单的代码,它运行后会打印字符’b‘。相信很多人都知道,这个函数会将变量a赋值为98,然后printf函数调用a的值,即98,98对应的ASCII码为‘b’,所以会打印出‘b’。

但是,98明明是int类型的值,本应该占据4个字节,又是怎么存储到仅仅有1个字节的a中呢?在内存中发生了什么我们不知道的故事呢?

分析

向char类型中赋值int类型的98

我们打开VS2022的调试界面,使用内存和监视功能,观察内存的变化。
在这里插入图片描述
我们执行一下赋值语句,观察内存的变化:
在这里插入图片描述
int型98的二进制形式为:
00000000-00000000-00000000-01100010
16进制形式为:
00-00-00-62

此时有两种可能的内存操作发生了:

  1. 电脑将00-00-00-62储存到地址为&a的内存中。
  2. 电脑将62储存到地址为&a的内存中。

为了更进一步的了解内存的变化,我们需要修改程序来观察。

向char类型中赋值int类型的-1

我们知道,-1的原码为:10000000-00000000-00000000-00000001
反码为:11111111-11111111-11111111-11111110
补码为:11111111-11111111-11111111-11111111
16进制为:ff-ff-ff-ff

如果我们为char类型赋值-1,就可以确定前面究竟是执行了哪一种内存操作了。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0bae2在这里插入图片描述
没错,我们发现数据只有一部分被储存到地址为&a的内存中,也就是说数据在存放前就发生了截断。

那么,保留的前面字节的值,还是后面字节的值呢?

向char类型中赋值0x11-00-00-22

我们构建一个int类型的数,确保它的十六进制的值为:11-00-00-22。
这个数的二进制位:00010001-00000000-00000000-00100010
转换为10进制为285212706。

在这里插入图片描述
我们发现,只有低位的22被保留下来。
此时,我们已经理解了赋值操作的流程:在这里插入图片描述

总结

赋值操作是 C 语言编程中最基础的操作之一,但它背后涉及到复杂的内存操作机制。通过本篇博客的介绍和分析,我们希望读者能够更好地理解赋值操作对内存的具体影响。

关注窝,每三天至少更新一篇优质c语言题目详解~

[专栏链接QwQ] :⌈c语言日寄⌋CSDN
[关注博主ava]:siy2333
感谢观看~ 我们下次再见!!


http://www.kler.cn/a/533905.html

相关文章:

  • Java基础面试题50题
  • openai agent第二弹:deepresearch原理介绍
  • Django框架的全面指南:从入门到高级
  • DeepSeek:全栈开发者视角下的AI革命者
  • 什么是数据库代理
  • 基于LabVIEW的Modbus-RTU设备通信失败问题分析与解决
  • python:递归函数与lambda函数
  • 操作系统1.6
  • Debian 安装 Nextcloud 使用 MariaDB 数据库 + Caddy + PHP-FPM
  • Python 自学秘籍:开启编程之旅,人生苦短,我用python。
  • Python-基于PyQt5,Pillow,pathilb,imageio,moviepy,sys的GIF(动图)制作工具
  • 探索 paraphrase-MiniLM-L6-v2 模型在自然语言处理中的应用
  • 【深度学习入门_机器学习理论】决策树(Decision Tree)
  • C# 中记录(Record)详解
  • JS-对象-BOM
  • 基于SpringBoot+vue高效旅游管理系统
  • 基础相对薄弱怎么考研
  • Clojure语言的软件工程
  • 鸿蒙5.0进阶开发:UI开发-富文本(RichEditor)
  • dl学习笔记(8):fashion-mnist
  • maven本地打包依赖无法引用
  • 基于微信小程序的培训机构客户管理系统设计与实现(LW+源码+讲解)
  • 动态规划——斐波那契数列模型问题
  • Java 进阶 01 —— 5 分钟回顾一下 Java 基础知识
  • 【华为OD-E卷 - 107 连续出牌数量 100分(python、java、c++、js、c)】
  • 使用 Deepseek AI 制作视频的完整教程