整形在内存中的存储(例题逐个解析)
目录
一.相关知识点
1.截断:
2.整形提升:
3.如何 截断,整型提升?
(1)负数
(2)正数
(3)无符号整型,高位补0
注意:提升后得到的是补码。要根据打印类型,判断是否有符号位;有效数字
二.例题
1.
2.
3.
4.
疑问:不应该算数转换为unsigned int 吗?
5.
6.
一.相关知识点
1.截断:
直接保留低位的二进制位
2.整形提升:
表达式中的字符(char)和短整形(short)操作数在使用之前被转换为普通整型(int),这种转换称为整型提升。
3.如何 截断,整型提升?
整型提升是按照变量的数据类型的符号位来提升的
(1)负数
char c1 = -1;
截断:-1的补码为:11111111111111111111111111111111 。 -1为int占4字节,c1是char占1字节。
直接保留 int 所占4字节中低位的1字节的二进制位:11111111
整型提升:因为 char 为 signed char 。所以整形提升的时候,高位补充符号位,即为1
提升后的结果为:11111111111111111111111111111111
(2)正数
char c2 = 1;
截断:1的补码为:00000000000000000000000000000001 。1为int占4字节,c1是char占1字节。
直接保留 int 所占4字节中低位的1字节的二进制位:00000001
整型提升:因为 char 为 signed char 。所以整形提升的时候,高位补充符号位,即为0
提升后的结果为:00000000000000000000000000000001
(3)无符号整型,高位补0
注意:提升后得到的是补码。要根据打印类型,判断是否有符号位;有效数字
二.例题
1.
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;
}
题解:
int main()
{char a = -1;//-1 是整数,32bit//11111111111111111111111111111111 (int)-1的补码//11111111 - char a 截断//11111111111111111111111111111111 提升(得到补码)signed char b = -1; //和a等价unsigned char c = -1;//11111111111111111111111111111111 (int)-1的补码//11111111 - char a 截断//00000000000000000000000011111111 - 提升,无符号的整型,高位补0// // -1 -1 255printf("a=%d,b=%d,c=%d", a, b, c);//%d是打印有符号的整数return 0;
}
2.
int main()
{char a = -128;printf("%u\n", a);//%u 打印无符号整型return 0;
}
题解:
int main()
{char a = -128;//10000000000000000000000010000000//11111111111111111111111101111111//11111111111111111111111110000000 - 128的补码//10000000 - a//11111111111111111111111110000000//%u - 第一位不是符号位printf("%u\n", a);//4294967168return 0;
}
3.
int main()
{char a = 128;printf("%u\n", a);return 0;
}
题解:
int main()
{char a = 128;//00000000000000000000000010000000 - 128的补码//10000000 - a//11111111111111111111111110000000printf("%u\n", a);//4294967168return 0;
}
4.
int main()
{int i = -20;unsigned int j = 10;printf("%d\n", i + j);return 0;
}
题解:
int main()
{int i = -20;unsigned int j = 10;//10000000000000000000000000010100 - -20的原码//11111111111111111111111111101011 - -20的反码//11111111111111111111111111101100 - -20的补码//00000000000000000000000000001010 - 10的补码//11111111111111111111111111110110 - 和的补码//11111111111111111111111111110101 - 和的反码//10000000000000000000000000001010 - 和的原码printf("%d\n", i + j);//-10return 0;
}
疑问:不应该算数转换为unsigned int 吗?
如果这样,根据和的反码,第一位不是符号位,结果为4294967286
但是,我们是以 %d 形式打印的,如果是以 %u 打印,确实是4294967286。
我以 %d(有符号的整数) 的形式打印,我就认为内存里存的是有符号数。
%u 我就认为内存里存的是无符号数。
理论上说,i+j 结果确实是无符号数。但是你是个无符号数也悠不住我用 %d 来打印。
一个数据放在内存里,它有无符号没法确定,是用的人决定它有无符号
从哲学角度来说,一个东西是什么,取决于看待的人的视角
5.
(1)
int main()
{unsigned int i;for (i = 9; i >= 0; i--){printf("%u\n", i);}return 0;
}
由于 i 是 unsigned int ,所以 i 不论怎么减,都不会 > 0 。
我们这样演示:
#include <windows.h>
int main()
{unsigned int i;for (i = 9; i >= 0; i--){printf("%u\n", i);Sleep(1000);}return 0;
}

(2)
int main()
{char a[1000];int i;for (i = 0; i < 1000; i++){a[i] = -1 - i;}printf("%d", strlen(a));return 0;
}
strlen 统计 ' \0 ' 之前的个数,' \0 ' 的ASCII码值为0 。所以本题是想让你判断,什么时候 a 里放第一个0
char 大多数是 signed char 其取值范围为 -128~127
所以放到 a 里的数字依次是:-1 -2 -3 ...... -127 -128 127 126 ...... 2 1 0 -1 -2 ......
到 0 之前是 128+127=255,结果就是255
(3)
unsigned char i = 0;//0~255int main()
{for (i = 0; i <= 255; i++){printf("hello world\n");}return 0;
}
i <= 255 的判断进入循环条件一直成立,循环不会停下来,一直打印 hello world
6.
int main()
{char a = 3;char b = 127;char c = a + b;printf("%d", c);return 0;
}
题解:
int main()
{//char --> signed charchar a = 3;//00000000000000000000000000000011//截断//00000011 - achar b = 127;//00000000000000000000000001111111//截断 //01111111 - bchar c = a + b;//00000011//01111111//整型提升//00000000000000000000000000000011//00000000000000000000000001111111//00000000000000000000000010000010 - 和的补码// 截断//10000010 - cprintf("%d\n", c);//-126//%d 是打印十进制的整数//11111111111111111111111110000010 - 补码//11111111111111111111111110000001//10000000000000000000000001111110 - 原码//-126return 0;
}
本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注。
小编会以自己学习过程中遇到的问题为素材,持续为您推送文章
相关文章:
整形在内存中的存储(例题逐个解析)
目录 一.相关知识点 1.截断: 2.整形提升: 3.如何 截断,整型提升? (1)负数 (2)正数 (3)无符号整型,高位补0 注意:提升后得到的…...
基于变分推理与 Best‑of‑N 策略的元 Prompt 自动生成与优化框架
摘要 本文提出了一种融合变分推理与 Best‑of‑N 策略的元 Prompt 自动生成与优化框架,通过高度参数化的模板、随机扰动采样及多指标评分机制,实现从初始提示生成到最终输出的动态优化。同时,针对实际应用中对自适应参数调整、深层语义理解、…...
AI 技术在智慧农业中的应用实践
智慧农业是通过现代信息技术(如物联网、大数据、人工智能等)提升农业生产效率、降低资源消耗、改善农产品质量的现代农业模式。AI 技术在智慧农业中的应用实践涵盖了从种植到收获的全流程,以下是具体的方案和应用场景: 1. AI 在智慧农业中的应用场景 1.1 精准种植 应用场景…...
蓝牙系统的核心组成解析
一、硬件层:看得见的物理载体 1. 射频模块(Radio Frequency Module) 专业描述:工作在2.4GHz ISM频段,支持GFSK/π/4 DQPSK/8DPSK调制方式 功能类比:相当于人的"嘴巴"和"耳朵" 发射端…...
centos 7误删/bash 拯救方法
进入救援模式 1. 插入CentOS 7安装光盘,重启系统。在开机时按BIOS设置对应的按键(通常是F2等),将启动顺序调整为CD - ROM优先。 2. 系统从光盘启动后,选择“Troubleshooting”,然后选择“Rescue a Cent…...
uniapp笔记-底部和首部标签页菜单生成
逻辑 这些都是需要配置pages.json文件。 其中底部需要手动配置tarBar,如: "tabBar": {"list":[{"pagePath": "pages/index/index","text": "首页"},{"pagePath": "pages/…...
基于Gemini 生成 Gemini Embedding
在本报告中,我们介绍了Gemini Embedding,这是一款基于谷歌功能最强大的大型语言模型Gemini的先进嵌入模型。借助Gemini的多语言和代码理解能力,Gemini Embedding能够为多种语言和文本模态的文本生成高度通用的嵌入表示。Gemini Embedding生成的表示可以预先计算并应用于多种…...
SpringBoot 和vue前后端配合开发网页拼图10关游戏源码技术分享
今天分享一个 前后端结合 的网页游戏 开发项目源码技术。 这也是我第一次写游戏类的程序,虽然不是特别复杂的游戏,但是是第一次写,肯定要记录一下了,哈哈。 游戏的内容 就是 我们显示中玩的那个 拼图碎片的 游戏,类似下…...
OpenCV计算摄影学(21)非真实感渲染之边缘保留滤波器edgePreservingFilter()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 滤波是图像和视频处理中的基础操作。边缘保留平滑滤波器被广泛应用于多种不同场景[98]。 cv::edgePreservingFilter 是一种边缘保留滤波器&#…...
Qemu 详解与 ARM 虚拟机搭建指南
1. Qemu 是什么? Qemu(Quick Emulator)是一款开源的机器模拟器和虚拟化工具,支持多种硬件架构(如 x86、ARM、PowerPC 等)。它的核心功能包括: 动态指令翻译:将不同架构的指令实时翻…...
JVM并发编程AQSsync锁ReentrantLock线程池ThreadLocal
并发编程2 synchronized锁实现**AQS****ReentrantLock实现****JUC 常用类**池的概念 ThreadLocalThreadLocal原理内存泄露强引用:软引用弱引用虚引用ThreadLocal内存泄露 synchronized锁实现 synchronized是一个关键字,实现同步,还需要我们提供一个同步锁对象,记录锁状态,记录…...
CMake学习笔记(三):静态库,动态库的生成和使用
一:动态库 接下来我们简单的讲解下动态库的建立和使用:在后面的项目的开发过程中,我们使用第三方库或者我们跑这个项目的时候我们总会看到一些.so的文件,这些就是所谓的动态库,里面的内容就是编译后的源文件,是程序运行时被加载和…...
《Classifier-Free Diffusion Guidance》的核心观点与方法
介绍《Classifier-Free Diffusion Guidance》的核心观点与方法 在扩散模型(Diffusion Models)的研究中,如何在生成样本的质量与多样性之间找到平衡一直是核心挑战之一。传统的生成模型(如GANs或Glow)通过截断…...
什么是数学建模?数学建模是将实际问题转化为数学问题
数学建模是将实际问题转化为数学问题,并通过数学工具进行分析、求解和验证的过程。 一、数学建模的基本流程 问题分析 • 明确目标:确定需要解决的核心问题。 • 简化现实:识别关键变量、忽略次要因素。 • 定义输入和输出:明确模…...
唤起“队列”的回忆
又来博客记录自己的学习心得了,嘿嘿嘿(^~^) 目录 队列的概念和结构: 队列的创建和初始化: 队列入栈: 队列出栈: 队列的销毁: 取队头和队尾数据: 结语: 队列的概念…...
Linux(8.4)NFS
文章目录 一、概念二、详解NFS1)软件名2)服务名3)配置文件4)端口号5)相关命令 三、部署NFS一、NFS服务端1)**配置源(本地或者网络源)**2)2、安装NFS**3)启动服…...
【位运算】速算密钥:位运算探秘
文章目录 前言例题一、判定字符是否唯一二、丢失的数字三、两整数之和四、只出现⼀次的数字 II五、消失的两个数字 结语 前言 什么是位运算算法呢? 位运算算法是以位运算为核心操作,设计用来高效解决特定问题的一系列计算步骤集合。它巧妙利用位运算直接…...
STM32G070CBT6读写FLASH中的数据
向FLASH中写入数据函数 /*函数说明:向FLASH中写数据形参:addr-要写入数据的起始地址 data-准备写入数据 len-数据大小返回值:1-成功,0-失败 */ uint8_t FlashWriteData(uint64_t addr,uint8_t data[],size_t len) {uint32_t Fir…...
算法刷题记录——LeetCode篇(4) [第301~400题](持续更新)
(优先整理热门100及面试150,不定期持续更新,欢迎关注) 322. 零钱兑换 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何…...
目标检测任务,如何区分两个相近似的目标
首先,要了解清楚检测的场景下,肉眼能否区分出目标的差异性。 如果可以区分,那观察数据周围背景的差异是否较大,可以先通过添加样本来提升模型的检测精度。添加样本时一定要注意,样本标注的准确性,样本的丰…...
中国在 AI 上超越美国,需要另辟蹊径
在过去的几年里,以大型语言模型(LLM)为核心的人工智能浪潮席卷全球。美国凭借其雄厚的科研基础、顶尖的技术公司以及掌握着关键硬件资源,牢牢占据了这一领域的领先地位。与此同时,中国在AI领域的进步虽然迅速ÿ…...
【实习经历Two:参与开源项目,学习并应用Git】
前端参与开源项目中使用过的git 1.参与开源项目(必备技能——git) 参与开源项目首先需要进入自己想参加的项目页面 点击右边的Fork即可复制到自己的仓库 像个人开发时常用的add、commit和push等命令就不过多介绍了,在这里主要是想记录一下自己作为从未…...
AD绘图基本操作
一、基本操作 注意:快捷键都要在英文模式下才能生效 1、移动 按住鼠标右键移动 2、切换桌面栅格距离 G 3、英寸和毫米 尺寸切换 Q 4、元件在3D模式下的移动 3D视角鼠标左键只起到选择元器件并移动之的功能, 单纯鼠标右键只能平移桌面 shift鼠…...
6k ± 1 规则
6k 1 规则 是基于对质数分布规律的观察和数学证明得出的。它指出,除了 2 和 3 之外,所有质数都可以表示为 6k 1 的形式,其中 k 是正整数。以下是详细的证明过程: 1. 质数的基本性质 质数是指大于 1 的自然数,且只能…...
AcWing 5960:输出前k大的数 ← 小根堆
【题目来源】 https://www.acwing.com/problem/content/5963/ 【题目描述】 给定一个长度为 n 的数组 a1,a2,…,an,统计前 k 大的数并且把这 k 个数从大到小输出。 【输入格式】 第一行包含整数 n。 第二行包含 n 个整数 a1,a2,…,an。 第三行包含整数 k。…...
V2X验证
1. 标准和规范验证 欧洲对 DSRC 和 V2X 系统有一系列的标准和规范,主要由 ETSI (European Telecommunications Standards Institute) 和 IEEE 等组织制定。验证通常包括以下标准和规范: ETSI EN 302 571:这是DSRC在欧洲的主要标准,规定了DSRC系统的技术要求和操作条件。ET…...
创建表空间和表
创建表 1.业务背景 在城市的住宅小区和商业区域中,需要对业主的用水情况及费用缴纳进行有效管理。业主类型涵盖普通居民、商业用户等不同类别(业主类型表),每种类型对应不同的水价标准(价格表)。区域表记…...
dfs(十二)21. 合并两个有序链表 递归解决
21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 [], l2 [] …...
51单片机指令系统入门
目录 基本概念讲解 一、机器指令 二、汇编指令 (一)汇编指令的一般格式 (二)按字节数分类的指令 三、高级指令 总结 基本概念讲解 指令是计算机(或单片机)中 CPU 能够识别并执行的基本操作命令…...
安全无事故连续天数计算,python 时间工具的高效利用
安全天数计算,数据系统时间直取,安全标准高效便捷好用。 笔记模板由python脚本于2025-03-17 23:50:52创建,本篇笔记适合对python时间工具有研究欲的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在于输出思考与经验&am…...
