负数在单片机上的存在方式

[复制链接]
1006|3
 楼主| 肉坨坨 发表于 2020-4-26 07:38 | 显示全部楼层 |阅读模式
以前学微机的时候,记得负数似乎以补码的形式存储在计算机中,我定义了一个char型变量z, 并赋值-2, z= -2;调试的时候显示Z的值为0xFE, 编译器认为(z>0),有大神知道怎么解释吗?
diweo 发表于 2020-4-26 17:05 | 显示全部楼层
0xFE存在内存里面,它本身并不知道是什么类型。可以表示unsigned char的254,也可以表示char的-2。具体是哪种类型,取决于用什么样的指令去处理它。
当我们写源代码时,先定义char a=-2,后面再用到这个a时,编译器会生成合适(与char相关的)指令来处理它。
假设我们再在代码中用到强制类型转换,那么编译器生成的指令就不再是与char相关的指令了,而是与我们指定的类型相关的指令了。-2可能就被处理成254了。





qxwd123 发表于 2020-4-26 20:22 | 显示全部楼层
可以了解一下源码、反码、补码的相关知识
比如
原码, 反码, 补码详解- ziqiu.zhang - 博客园
ayb_ice 发表于 2020-4-27 08:31 | 显示全部楼层
补码不就是这样的吗,,

负数的补码是按位取反再加一
00000001按位取反是11111110,再加1就是11111111,就是0xff
您需要登录后才可以回帖 登录 | 注册

本版积分规则

419

主题

431

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部