社区
C语言
帖子详情
一个int型量的机器表示问题
ltolll
2006-07-27 10:32:20
在16位机上
int x=0xFFFF;
问x的值为?
我觉得是:x=1111,1111,1111,1111=-32767
书上答案是:-1
不知是怎么做的?
...全文
512
16
打赏
收藏
一个int型量的机器表示问题
在16位机上 int x=0xFFFF; 问x的值为? 我觉得是:x=1111,1111,1111,1111=-32767 书上答案是:-1 不知是怎么做的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ltolll
2006-08-10
打赏
举报
回复
感谢houdy的回答,我是不是可以这样理解,当机器数要转化成实际数值时,先检查其目标类型(每个类型有自已的一套转化规则),然后以其规则转化。以整型为例:
x=0xFFFF
二进制:1111,1111,1111,1111
判断符号位,为1(负),则编译器(这个工作是编译器做的吗?)认定此数为一负数且为补码表示
(补码-1)=》反码:1111,1111,1111,1111 - 1 =》1111,1111,1111,1110
(反码)取反=》原码 (1111,1111,1111,1110)反 =》1000,0000,0000,0001(符号位不参加运算)
最后得到-1
ckp
2006-08-07
打赏
举报
回复
#include "stdio.h"
#include <sys/types.h>
int main(int argc, char* argv[])
{
unsigned char i = 0;
unsigned short i16 = 0;
unsigned int i32 = 0;
unsigned _int64 i64 = 0;
i--;
i16--;
i32--;
i64--;
//无符号8位整数
//unsigned char
//无符号16位整数
//unsigned short
//无符号32位整数
//unsigned long
//无符号64位整数
//unsigned _int64
printf("byte i = %u\n", i);
printf("unsigned short i16 = %hu\n", i16);
printf("unsigned int i32 = %lu\n", i32);
printf("int64 = %I64u\n", i64);
return 0;
}
xddzccn
2006-08-07
打赏
举报
回复
要深入的理解硬件和代码的关系推荐看
深入理解计算机系统!
bacmoz
2006-08-07
打赏
举报
回复
有符号数跟无符号数的区别
linxb1210
2006-08-06
打赏
举报
回复
底层的问题
不明白
houdy
2006-08-06
打赏
举报
回复
x=0xFFFF实际上x的值为65535?
0xFFFF就等于65535?,我觉得这个观点是不对的。
单个0xFFFF是没有什么意义的,我们只能从0xFFFF看出这个16进制数占用2个字节,其中每位都是1,仅此而已。只有赋予一个数据类型后,才能根据数据类型将0xFFFF"解析"成相应的数据:
1.将0xFFFF赋给一个short型(2 bytes)的变量,0xFFFF就给解析成(-1)
2.将0xFFFF赋给一个unsigned short型的变量,0xFFFF就被解析成(65535)
3.将0xFFFF赋给一个int型(4 bytes)的变量,0xFFFF被转化成0xFFFFFFFF,即(-1)
4.将0xFFFF赋给一个unsigned short型的变量,0xFFFF被转化成0x0000FFFF,即(65535)
ciwei6744
2006-08-06
打赏
举报
回复
越界的数计算机可以循环过来再算,所以编译器不会认为他是错误的
ltolll
2006-08-06
打赏
举报
回复
x=0xFFFF实际上x的值为65535,为什么计算机在存储之前不判断一下,这个数是超出了界限的呢?这个数在赋值时可以知道0xFFFF是个正数,而在存储时会发现1111,1111,1111,1111的第一位为1显然是负数,与之前的条件矛盾,这时就可以得出正数数值过大的结论,这样也就不会造成存储错误了。
我就是不理解,这是很容易判断的,为什么机器不去判断呢,原因何在?
xddzccn
2006-08-06
打赏
举报
回复
studing!
a_b_c_abc9
2006-08-06
打赏
举报
回复
houdy的进一步解释很好、
aaalife
2006-07-27
打赏
举报
回复
嗯...补码...
tailzhou
2006-07-27
打赏
举报
回复
补码的规则:
1)取反;
2)加1;
以-1为例;
0000000000000001
取反后
1111111111111110
加一后
1111111111111111
tailzhou
2006-07-27
打赏
举报
回复
机器内负数用补码表示
1111,1111,1111,1111 是 -1的补码;
fishyqd
2006-07-27
打赏
举报
回复
其它相关内容可以看计算机组成原理
anyue417
2006-07-27
打赏
举报
回复
呵呵,以上皆为正解
jixingzhong
2006-07-27
打赏
举报
回复
全1 是负数的最大值 ...
在机器内部使用的是 补码 !
楼主可以这么记,
先不管符号位,
在其他位中, 全1 显然是最大的,
然后前面符号位是 1,
那么是负数, 最大的负数? 当然是 -1 ....
跨版本ROS2通信:Ubuntu 20.04实现Foxy与Humble容器话题互通指南
默认DDS不兼容:Foxy默认使用FastDDS,Humble默认使用CycloneDDS网络隔离限制:容器默认使用独立网络命名空间域ID不匹配:ROS_DOMAIN_ID默认值为0,但需显式指定确保一致性。
ROS1与ROS2跨版本通信实战:5步搞定ros1_bridge配置(含Docker避坑指南)
本文提供了ROS1与ROS2跨版本通信的实战指南,重点讲解如何通过5个步骤配置ros1_bridge,并包含Docker环境下的深度避坑方案。文章详细阐述了在容器化隔离模式下,如何构建专用桥接容器、解决网络发现与消息类型映射等常见
问题
,帮助开发者高效打通新旧ROS系统间的数据通道。
ROS2新手必学:ros2 doctor系统健康诊断全解析
ROS2不是单一工具,而是一套强耦合的分布式系统框架,其稳定运行依赖环境变量、DDS中间件、Python包生态与CLI工具链四大基础要素。理解ros2 doctor的工作原理,本质是掌握ROS2运行时的启动验证逻辑——它不替代基础命令,而是通过零信任式检查(如真实路径探测、动态RMW加载、运行时包版本校验)暴露隐藏的配置冲突、路径污染与中间件兼容性
问题
。该工具的技术价值在于将模糊的‘命令不可用’‘节点不通信’等现象,转化为可定位、可修复的具体状态指标,广泛应用于新手环境排障、CI/CD自动化验证及跨平台部署
ROS2进程内通信实战:零拷贝、低延迟与
Int
ra-Process启用全指南
Int
ra-Process通信是ROS2区别于ROS1的核心机制,本质是通过std::shared_ptr实现同节点内消息的零拷贝传递,绕过序列化、反序列化及RMW中间件层。其原理基于内存契约与对象生命周期绑定,在满足消息类型可平凡复制、同Node内发布/订阅、回调使用SharedPtr等前提下,将端到端延迟从毫秒级压降至百纳秒级。该技术显著提升CPU效率与缓存局部性,特别适用于高频小消息场景(如IMU、Twist、Bool),广泛应用于
机器
人实时控制、SLAM前端、嵌入式边缘节点等对确定性延迟敏感的工程实
ROS 2 EOL版本生命周期管理与迁移实战指南
ROS 2 EOL(End-of-Life)指官方终止支持的发行版,其本质是
机器
人中间件生态中版本生命周期管理的核心机制。它基于安全更新能力、API演进约束和CI资源消耗三重客观限制,通过量化模型(如基础支持期、LTS扩展期、用户活跃阈值)决定版本退役时间。EOL并非功能失效,而是丧失安全补丁、依赖同步、硬件兼容、工具链支持及社区响应五大生产级保障能力,直接影响教育实训、工业AGV、医疗
机器
人等对稳定性与合规性要求严苛的场景。理解EOL机制,是开展ROS 2项目选型、风险评估与平滑迁移的前提。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章