C语言中整数类型及其类型转换
1.数据的存储和排列
是的,在C语言中,整数类型通常以补码(two's complement)形式存储在内存中。这是因为补码表示法在处理有符号整数的加减运算上更为简便和高效。
2.有符号数和无符号数之间的转换
在C语言中,有符号数和无符号数之间的转换可以通过类型转换(type casting)实现。需要注意的是,这种转换会影响数值的解释。
有符号数转无符号数
将有符号数转换为无符号数时,二进制表示保持不变,但解释方式不同。
#include <stdio.h>int main(){int signed_num = -1;unsigned int unsigned_num = (unsigned int)signed_num; // 0xFFFFFFFFprintf("signed_num = %d, unsigned_num = %u\n", signed_num, unsigned_num);return 0;
}
输出结果:

有符号数转无符号数在内存中的解释:
| 变量名 | 内存地址 | 二进制表示 | 解释 |
|---|---|---|---|
| signed_num | 0x7fffeeaee10 | 11111111 11111111 11111111 11111111 | -1 (有符号数) |
| unsigned_num | 0x7fffeeaee14 | 11111111 11111111 11111111 11111111 | 4294967295 (无符号数) |
可以看到二进制表示保持不变,只是改变了解释方式。
无符号数转有符号数
将无符号数转换为有符号数时,同样二进制表示保持不变,但解释方式不同。
#include <stdio.h>int main(){unsigned int unsigned_num = 4294967295; // 0xFFFFFFFFint signed_num = (int)unsigned_num; // -1printf("unsigned_num = %u, signed_num = %d\n", unsigned_num, signed_num);return 0;
}
输出结果:

无符号数转有符号数在内存中的解释:
| 变量名 | 内存地址 | 二进制表示 | 解释 |
|---|---|---|---|
| unsigned_num | 0x7fffeeaee18 | 11111111 11111111 11111111 11111111 | 4294967295 (无符号数) |
| signed_num | 0x7fffeeaee1c | 11111111 11111111 11111111 11111111 | -1 (有符号数) |
可以看到二进制表示保持不变,只是改变了解释方式。
3.不同字长整数之间的转换
在C语言中,不同字长的整数之间的转换主要涉及位宽扩展和截断操作。
从小字长向大字长扩展
对于有符号数,可以通过符号扩展实现扩展;对于无符号数,可以通过零扩展实现扩展。
#include <stdio.h>int main(){char small_num = -1;int large_num = (int)small_num; // 符号扩展,小数到大数printf("small_num = %d, large_num = %d\n", small_num, large_num);unsigned char usmall_num = 255;unsigned int ularge_num = (unsigned int)usmall_num; // 零扩展printf("usmall_num = %u, ularge_num = %u\n", usmall_num, ularge_num);return 0;
}
输出结果:

从小字长向大字长扩展在内存中的解释:
| 变量名 | 内存地址 | 二进制表示 | 解释 |
|---|---|---|---|
| small_num | 0x7fffeeaee20 | 11111111 | -1 (8位有符号数) |
| large_num | 0x7fffeeaee24 | 11111111 11111111 11111111 11111111 | -1 (32位有符号数) |
| 变量名 | 内存地址 | 二进制表示 | 解释 |
|---|---|---|---|
| usmall_num | 0x7fffeeaee28 | 11111111 | 255 (8位无符号数) |
| ularge_num | 0x7fffeeaee2c | 00000000 00000000 00000000 11111111 | 255 (32位无符号数) |
对于有符号数,从小字长向大字长可以通过符号扩展实现扩展;
从大字长向小字长截断
当将大字长整数转换为小字长整数时,高位会被截断,只保留低位。
#include <stdio.h>int main(){int large_num = 257; // 0x00000101char small_num = (char)large_num; // 0x01printf("large_num = %d, small_num = %d\n", large_num, small_num);unsigned int ularge_num = 65537; // 0x00010001unsigned char usmall_num = (unsigned char)ularge_num; // 0x01printf("ularge_num = %u, usmall_num = %u\n", ularge_num, usmall_num);return 0;
}
输出结果:

大字长到小字长整数之间的转换在内存中的解释:
| 数据类型 | 变量名 | 值 | 内存地址示例 | 二进制表示 | 解释 |
| int | large_num | 257 | 0x7010 | 00000000 00000000 00000001 00000001 | 257 |
| char | small_num | 1 | 0x7000 | 00000001 | 1(截断) |
| unsigned int | ularge_num | 65537 | 0x7014 | 00000000 00000001 00000000 00000001 | 65537 |
| unsigned char | usmall_num | 1 | 0x7008 | 00000001 | 1(截断) |
可以看到 大字长到小字长整数之间的转换在是直接截去多余的高位,只保留对应得低位。
相关文章:
C语言中整数类型及其类型转换
1.数据的存储和排列 是的,在C语言中,整数类型通常以补码(twos complement)形式存储在内存中。这是因为补码表示法在处理有符号整数的加减运算上更为简便和高效。 2.有符号数和无符号数之间的转换 在C语言中,有符号数和…...
powerjob连接postgresql数据库(支持docker部署)
1.先去pg建一个powerjob-product库 2.首先去拉最新的包,然后找到server模块,把mysql的配置文件信息替换成pg的 spring.datasource.hikari.auto-committrue spring.datasource.remote.hibernate.properties.hibernate.dialecttech.powerjob.server.pers…...
浅谈位运算及其应用(c++)
目录 一、位运算的基础(一)位与(&)(二)位或(|)(三)位异或(^)(四)位取反(~)&#x…...
Git版本管理中下列不适于Git的本地工作区域的是
Git版本管理中下列不适于Git的本地工作区域的是 A. 工作目录 B. 代码区 C. 暂存区 D. 资源库 选择B Git本地有四个工作区域: 工作目录(Working Directory)、 暂存区(Stage/Index)、 资源库(Repository或Git Directory)、 git仓库(Remote Di…...
webGL + WebGIS + 数据可视化
webGL: 解释:用于在浏览器中渲染 2D 和 3D 图形。它是基于 OpenGL ES 的,提供了直接操作 GPU 的能力。 库: Three.jsBabylon.jsPixiJSReglGlMatrixOsgjs WebGIS: 解释:用于在 Web 浏览器中处理和展示地…...
职场“老油条”的常规操作,会让你少走许多弯路,尤其这三点
有句话说得好:“在成长的路上,要么受教育,要么受教训。” 挨过打才知道疼,吃过亏才变聪明,从职场“老油条”身上能学到很多经验,不一定全对,但至少有可以借鉴的地方,至少能让你少走…...
Ceres Cuda加速
文章目录 一、简介二、准备工作三、实现代码四、实现效果参考资料一、简介 字Ceres2.2.1版本之后,作者针对于稠密矩阵的分解计算等操作进行了Cuda加速,因此这里就基于此项改动测试一下效果。 二、准备工作 1、首先是需要安装Cuda这个英伟达第三方库,https://developer.nvidi…...
微信小程序生成小程序转发链接,携带参数跳转到另外一个页面
🤵 作者:coderYYY 🧑 个人简介:前端程序媛,目前主攻web前端,后端辅助,其他技术知识也会偶尔分享🍀欢迎和我一起交流!🚀(评论和私信一般会回!!) 👉 个人专栏推荐:《前端项目教程以及代码》 ✨一、前言 需求:在页面A生成分享链接(携带参数),分享到微信…...
图解RocketMQ之消息如何存储
大家好,我是苍何。 人一辈子最值得炫耀的不应该是你的财富有多少(虽然这话说得有点违心,呵呵),而是你的学习能力。技术更新迭代的速度非常快,那作为程序员,我们就应该拥有一颗拥抱变化的心&…...
2024年中国信创产业发展白皮书精简版
获取方式: 链接:https://pan.baidu.com/s/1rEHMfcCfJm4A40vzrewoCw?pwda5u1 提取码:a5u1 得益于中国数字经济的迅猛发展,2023年中国信创产业规模达20961.9亿元,2027年有望达到37011.3亿元,中国信创市场…...
Redis2-Redis常见命令
目录 Redis数据结构介绍 Redis通用命令 KEYS DEL EXISTS EXPIRE String类型 Key的层级格式 Hash类型 List类型 Set类型 SortedSet类型 Redis数据结构介绍 Redis是一个key-value的数据库,key一般是String数据库,value的类型多种多样 可以通过…...
一天攻克一个知识点 —— 设计模式之动态代理
一、设计模式之代理设计 代理设计是在Java开发中使用较多的一种设计模式,所谓的代理设计模式就是指一个代理主体操作真实主体,真实主体操作具体业务,代理主体负责给具体业务添砖加瓦。 就好比在生活中你有一套房子想要出租(你真实主体)&…...
数据采集与预处理【大数据导论】
各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 数据采集与预处理前 必看 【大数据导论】—大数据序…...
白骑士的PyCharm教学进阶篇 2.2 高级调试技术
系列目录 上一篇:白骑士的PyCharm教学进阶篇 2.1 高效编码技巧 在Python开发中,调试是一个非常重要的环节。PyCharm作为一款功能强大的IDE,不仅提供了基本的调试功能,还包含了许多高级调试工具与技巧。本篇将详细介绍这些高级调试…...
[网鼎杯]2018Unfinish
使用ctf在线靶场https://adworld.xctf.org.cn/home/index。 进入靶场,发现是一个登录页面。 使用awvs进行扫描,发现存在login.php和register.php,并且register.php存在sql注入漏洞。 访问一下register.php试试,发现是一个注册页面…...
Java算法-力扣leetcode-383. 赎金信
383. 赎金信 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1:…...
使用idea对spring全家桶的各种项目进行创建
目录 1. 简介2. spring2.1 简介2.2 创建 3. springmvc3.1 介绍3.2 创建 4. springboot4.1 简介4.2 创建(仅仅就其中一种) 5. 其他:maven6. 参考链接 1. 简介 因为总是分不清spring全家桶,所以就在这里进行一个总结。 2. spring …...
FAT32、NTFS、FAT的区别
FAT(File Allocation Table) 特点 簇大小限制:FAT文件系统的簇大小是固定的,这限制了单个文件的大小和文件系统的效率。 存储效率:由于簇大小的限制,FAT文件系统在存储小文件时可能会浪费空间。 文件系统结…...
捉虫笔记(二)之 杀软请你自重点
捉虫笔记(二)之 杀软请你自重点 前一篇文章介绍了如何配置符号,这一篇文章我们来个实战。 1 现象 在我们的程序中利用robocopy进行文件的复制。但是QA反馈,只要进行了备份操作,整个进程就会卡住。但是奇怪的是只有他…...
python学习之路 - python的函数
目录 一、python函数1、函数介绍2、函数的定义3、函数的参数4、函数的返回值5、函数说明文档6、函数的嵌套调用7、变量的作用域8、综合案例9、函数与方法的区别 二、python函数进阶1、函数多返回值2、函数多种传参方式a、位置参数b、关键字参数c、缺省参数d、不定长参数 3、匿名…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
FOPLP vs CoWoS
以下是 FOPLP(Fan-out panel-level packaging 扇出型面板级封装)与 CoWoS(Chip on Wafer on Substrate)两种先进封装技术的详细对比分析,涵盖技术原理、性能、成本、应用场景及市场趋势等维度: 一、技术原…...
