qq1242009750 发表于 2018-1-1 12:35:16

字母表相对定位

本帖最后由 qq1242009750 于 2018-7-18 00:37 编辑

                                                                  字母表相对定位      

前几天做题,遇到了这么一题:请找出当前字母的第前5个元素。然后就突发其想,写了这篇帖子。         

好接下来我们看一张图片:

我们知道字母表的物理存储结构不是一个环,换句话说:当要寻找的字母超出了字母表时就会发生溢出,那我们如何避免这个溢出呢?

哈哈,其实要避免这个溢出很简单,举个栗子吧(2333333):
----------------------------------------------------------前溢出--------------------------------------------------------------


看了分析相信大家都知道了,什么是非溢出偏移量了;其实就是找出当前第N个字母的N。

放波代码:
        if (ch >= 'A' + 5)        //判断字母是否大于或等于第六个字母
        {
                //此时为非溢出操作
                ch -= 5;
        }

那什么是溢出偏移量呢?      当发生溢出时,找到正确字母的偏移量。

如图所示:
那我们如何计算溢出偏移量呢?
答:用找到字母在字母表的下标减去输入字母在字母表的下标,就可找出溢出偏移量了。
以上面的例子为例:它的溢出偏移量为24-3=21。

我们可以给出如下代码:      //发生溢出
        if (ch - 5 < 'A')
        {
                //加上溢出偏移值
                ch += 21;
        }

总结:
        if (ch >= 'A' + 5)        //判断字母是否大于或等于第六个字母
        {
                //此时为非移除操作
                ch -= ch - 5;
        }
        else
        {
                ch += 21;
        }

---------------------------------------------------------------------------后溢出--------------------------------------------------------------------------
就在前两天,又遇到了这么一题:请找出当前字母的第后5个元素。
如图所示:
可以看出前溢出和后溢出的非溢出偏移量是不一样的,代码如下:        //判断是否会溢出
        if (ch <= 'Z' - 5)
        {
                ch += 5
        }
后溢出的溢出偏移量和前溢出的溢出偏移量有区别,如图:
那我们如何计算溢出偏移量呢?
答:用输入字母在字母表的下标减去找到字母在字母表的下标,就可找出溢出偏移量了。
以上面的例子为例:它的溢出偏移量为21-0=21。
给出的代码如下:      //发生了溢出
        if (ch > 'Z' - 5)
        {
                //减去溢出偏移值
                ch -= 21;
        }
总结:        //判断是否会溢出
        if (ch <= 'Z' - 5)
        {
                ch += 5
        }
        else
        {
                ch -= 21;
        }

SriChen 发表于 2018-1-1 16:44:04

看到帖子里提到“偏移量”,不禁想起了大学学习汇编语言的时候。

qq1242009750 发表于 2018-1-1 18:43:37

SriChen 发表于 2018-1-1 16:44
看到帖子里提到“偏移量”,不禁想起了大学学习汇编语言的时候。

哈哈 勾起了你过去的回忆2333

mov dword ptr , 1000H
页: [1]
查看完整版本: 字母表相对定位