社区
汇编语言
帖子详情
-138的补码怎么求?别吐槽我。。
number_lock
2012-02-01 01:23:46
当8086cpu在计算某数-138时,会先求-138的补码然后相加,问题是-138的补码怎么求?真心求教啊。。
...全文
1086
8
打赏
收藏
-138的补码怎么求?别吐槽我。。
当8086cpu在计算某数-138时,会先求-138的补码然后相加,问题是-138的补码怎么求?真心求教啊。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
masmaster
2012-02-01
打赏
举报
回复
零扩展用于无符号数,符号扩展用于补码数字,补码数字扩展的规则是添加最好有效位的值的副本。在机器中,有符号数用补码表示。
asd605499941a
2012-02-01
打赏
举报
回复
[Quote=引用 2 楼 asd605499941a 的回复:]
我是这样理解的:
因为最高位为符号位
1为负,0为正
如果是8位的话
那么可以改动后7位数字
变化就有2^7次方种,可以表示2^7个数
2^7=128,当符号位为0,后面可以表示128个数,即(00000000~01111111)就是0到127
当符号位为1,后面也可以表示128个数,即(10000000~11111111)以为符号位为1的都是负数,所以他(10000000~111……
[/Quote]
还有可以对一个二进制数进行扩展
如:21的8位二进制和16位的二进制补码如下:
8 位:00010101
16位:0000000000010101
-3的8位二进制补码和16位二进制补码如下:
8位11111101
16位1111111111111101
扩展的都是他的符号位
如果你只是要求要8位数的话也可以只要最右面那8位
就像如果你要8位的-138补码也可以当做01110110
foilsman
2012-02-01
打赏
举报
回复
负数补码的求值是该数的绝对二进制数按位求反再加1,其中第一位为符号位(负数为1,正数为 0) ,所以:
138=10001010B,按位求反为 11110101,加1后为 11110110;我在 emu8086上转换得出 0FFFFFF76h,不知是不是这样?
asd605499941a
2012-02-01
打赏
举报
回复
我是这样理解的:
因为最高位为符号位
1为负,0为正
如果是8位的话
那么可以改动后7位数字
变化就有2^7次方种,可以表示2^7个数
2^7=128,当符号位为0,后面可以表示128个数,即(00000000~01111111)就是0到127
当符号位为1,后面也可以表示128个数,即(10000000~11111111)以为符号位为1的都是负数,所以他(10000000~11111111)表示-1~-128
138要表示他只能是用8位的二进制数,那么符号位就会和这个数的最高位产生冲突
所以我把他当做16位
为【00000000】【10001010】
-138为138全部取反+1
则是【11111111】【01110110】
以上纯属个人观点,仅供参考
net_friends
2012-02-01
打赏
举报
回复
负数补码=原码+0xffffff(具体位数根据实际位数来)+1
masmaster
2012-02-01
打赏
举报
回复
[Quote=引用 6 楼 number_lock 的回复:]
引用 5 楼 masmaster 的回复:
零扩展用于无符号数,符号扩展用于补码数字,补码数字扩展的规则是添加最好有效位的值的副本。在机器中,有符号数用补码表示。
那是不是这样:136-138,就是对138进行符号扩展为-138,即对扩展的位全赋为1?
[/Quote]
-138在机器里用补码表示
138的二进制表示:10001010
他在机器里用补码表示,求反加一得到:
取反:
01110101
加一:
01110110 ;-138在机器里的补码表示
在机器里,减法操作a-b是通过a+(-b),即,a加b的补码,这里就是
136-138
=136+(-138)
=10001000+01110110
=11111110(FE)
=-1x2^7+1x2^6+1x2^5+1x2^4+1x2^3+1x2^2+1x2^1+0x2^0
=-128+64+32+16+8+4+2+0
=-128+126
=-2
大概就是这么一个过程。我现在在看《深入理解计算机系统》,那里讲的非常详细。特此推荐。
GSDN00A
2012-02-01
打赏
举报
回复
-138
1111111101110110
负数是正数的反码+1
number_lock
2012-02-01
打赏
举报
回复
[Quote=引用 5 楼 masmaster 的回复:]
零扩展用于无符号数,符号扩展用于补码数字,补码数字扩展的规则是添加最好有效位的值的副本。在机器中,有符号数用补码表示。
[/Quote]
那是不是这样:136-138,就是对138进行符号扩展为-138,即对扩展的位全赋为1?
如何编写更高层次嵌入式C代码?
如何编写更高层次嵌入式C代码?1. 简介2. C语言特性2.1处处都是陷阱2.1.1 无心之过2.1.2 数组下标2.1.3 容易被忽略的break关键字2.1.4 意想不到的八进制2.1.5 指针加减运算2.1.6 关键字sizeof2.1.7 增量运算符’++’和减量运算符‘--‘2.1.8 逻辑与’&&’和逻辑或’||’的陷阱2.1.9 结构体的填充2.2 不可轻视的优先级2.3 隐式转换3. 编译器3.1 不能简单的认为是个工具3.2 不能依赖编译器的语义检查3.2.1 莫名的死机3
编写优质嵌入式C程序
1. 简介 市面上介绍C语言以及编程方法的书数目繁多,但对如何编写优质嵌入式C程序却鲜有介绍,特别是对应用于单片机、ARM7、Cortex-M3这类微控制器上的优质C程序编写方法几乎是个空白。本文面向的,正是使用单片机、ARM7、Cortex-M3这类微控制器的底层编程人员。 编写优质嵌入式C程序绝非易事,它跟设计者的思维和经验积累关系密切。嵌入式C程
如何用更高层次编写嵌入式C代码?
摘要:本文首先分析了C语言的陷阱和缺陷,对容易犯错的地方进行归纳整理;分析了编译器语义检查的不足之处并给出防范措施,以Keil MDK编译器为例,介绍了该编译器的特性、对未定义行为的处理以...
一些技巧,如何更高层次编写优质嵌入式C代码?
摘要:本文首先分析了C语言的陷阱和缺陷,对容易犯错的地方进行归纳整理;分析了编译器语义检查的不足之处并给出防范措施,以Keil MDK编译器为例,介绍了该编译器的特性、对未定义行为的处理以...
超全的英语短句汇集
English 900 英语九百句常用职位英文译名超级短句成语集锦打开话匣子PC电脑词汇一百个绝佳句型李阳英语365句托福听力常用短语校园英语迷你惯用语洋话连篇至理名言English 900 英语九百句第一册一、 Greetings 问候语 1. hello! / hi! 你好! 2. good morning / afternoon / evening! 早晨(下午/晚上)好! 3.
汇编语言
21,458
社区成员
41,601
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章