. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->基础知识
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  16进制相加问题  [已解决] 回复[ 7次 ]   点击[ 421次 ]  
a271494225
[帖 主]   [ 发表时间:2008-08-02 14:21 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:6
注册日期:2008-07-21 02:18
我想问下他们是怎么相加的,我刚学没几天,每次都转换成其他的类型才相加,麻烦各位告诉我如何直接相加,仔细点,我比较苯,谢谢了
crazyman
[第1楼]   [ 回复时间:2008-08-02 14:32 ]   [引用]   [回复]   [ top ] 
荣誉值:152
信誉值:3
注册日期:2008-01-24 21:26
首先,16进制无非是满16向高位进位,就像10进制的满10向高位进位一样。
16进制的16个数据是:1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,16进制的标识是在末尾加“H”,比如说18=12H。当某一位置上超过了F就会产生进位,因为fH=15,所以,超过fH就相当于大于等于16了,也就够进位的了。如30+3=1EH+3H=21H
16进制转10进制比较好转,比如说一个数据xyH,只有两个位,所以位数为2,则其十进制的数据为y*16^(0)+x*16^(1)。
公式:
一个位数为n的16进制数据Xn-1Xn-2...X0 H,其转换成10进制数据为X0*16^0+X0+1*16^1+...+X(n-2)*16^(n-2)+X(n-1)*16^(n-1).
crazyman
[第2楼]   [ 回复时间:2008-08-02 14:34 ]   [引用]   [回复]   [ top ] 
荣誉值:152
信誉值:3
注册日期:2008-01-24 21:26
如果将16进制转为2进制就更简单了,只要将每一位上的数据,转成4位二进制就行了。比如说1A9H = 0001 1010 1001 B.
a271494225
[第3楼]   [ 回复时间:2008-08-02 14:39 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:6
注册日期:2008-07-21 02:18
那这样行不,假如是 12E+E=148, 也就是E=14,那么14加14等于28,向2加28等于148不知道对不
crazyman
[第4楼]   [ 回复时间:2008-08-02 15:44 ]   [引用]   [回复]   [ top ] 
荣誉值:152
信誉值:3
注册日期:2008-01-24 21:26
你的理解是不对的。
12EH + EH 的计算过程是这样的。
从低位开始,E+E = 14+14=28 = 1CH,此时C做为最低位,而1是要向高位进位的。
向原来12EH中的2的位置上进位1,那么第二位就是2+1=3了,没有想更高位进位。
所以,最后的结果是13CH。
楼主最后的将2加上28的算法是不对的,不要将16进制的数据和10进制的数据进行加减,没有在一个进制层上,是不对的。
a271494225
[第5楼]   [ 回复时间:2008-08-02 18:45 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:6
注册日期:2008-07-21 02:18
哦,太谢谢楼上那位了,我懂了,我按10进制算了,结果要是按16进制就对了,呵呵
yuwuc
[第6楼]   [ 回复时间:2008-08-02 18:47 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-07-28 16:30
假设两数为abcd,efg.两数相加,则数字从右到左逐个相加,即为(a)(b+e)(c+f)(d+g),若两个数字相加之和大于或等于16,则向高位进1,且该位数字变为(16-两数之和).
a271494225
[第7楼]   [ 回复时间:2008-08-02 18:52 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:6
注册日期:2008-07-21 02:18
此贴由 贴主 于 [ 2008-08-02 18:52 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved