zoukankan      html  css  js  c++  java
  • 判断arm立即数是否合法的小程序

          今天老师布置了课后习题,有一题是判断立即数的,大家都知道,arm里的立即数并非都是合法的。

          描述:如立即数记作 <immediate> ,8位常数记作immed_8,4位的循环右移值记作rotate_imm,有效的立即数是由一个8位的立即数循环左移偶数位得到,则有效立即数immediate可表示成:
    <immediate>   =   immed_8循环右移(   2   *   rotate_imm   )

    例:有效立即数   0x0000F200,0x00110000,   0x00012800
          无效立即数   0x1010,   0x00102,   0xFF1000
    显然,对于8位立即数都是有效的。

          其实从定义上判断一个数是不是立即数也很简单的:

    1.看所有的bit位为1的是否在一个字节中

    2.若1条件满足,则看是否可以经过偶数位左移得到

    满足这两个条件的就是合法的立即数了,不过还是写了一个小程序来判断,看来我还是这么的懒,嘻嘻。

    #include <stdio.h>  

    /************************************************************
    描述:循环左移函数
    输入:val,要判断的立即数
    n,要左移的位数(0--15)
    返回:循环左移n位后的立即数
    ***********************************************************
    */

    unsigned int left(unsigned int val, int n)
    {
    if (n <0 || n> 15)
    {
    return 0xffffffff;
    }

    unsigned int rtn;

    rtn = val << (2 * n);
    rtn |= (val & (0xffffffff << (32 - 2 * n))) >> (32 - 2 * n);

    return rtn;
    }

    /************************************************************
    描述:判断立即数是否有效
    输入:val,要判断的立即数
    返回:true,立即数有效
    false,立即数无效
    ***********************************************************
    */

    int Judge(unsigned int val)
    {
    int i = 0;

    for (i = 0; i < 16; i++)
    {
    if(left(val, i) <= 0x000000ff )
    return 1;
    }

    return 0;
    }

    int main(void)
    {
    int num = 0;


    while(printf("请输入:"), 1 == scanf("%x", &num))
    {
    if(Judge(num))
    {
    printf("是合法立即数!/n");
    }
    else
    {
    printf("非法立即数!/n");
    }
    }

    return 0;
    }
    ----------------------------------------------------------------------------------  

    转载我博客文章郑重声明:技术性网站著名原创作者即可转载,商业性网站必须经过我的同意才能转载,否则追究责任——
    pang123hui的博客:
  • 相关阅读:
    洛谷P1265 公路修建(Prim)
    洛谷P1144 最短路计数(SPFA)
    洛谷P1198 [JSOI2008]最大数(BZOJ.1012 )
    洛谷P2879 [USACO07JAN]区间统计Tallest Cow
    洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)
    洛谷P2105 K皇后
    洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)
    洛谷P2982 [USACO10FEB]慢下来Slowing down(线段树 DFS序 区间增减 单点查询)
    洛谷P1784 数独
    洛谷 P2574 XOR的艺术(线段树 区间异或 区间求和)
  • 原文地址:https://www.cnblogs.com/pang123hui/p/2309911.html
Copyright © 2011-2022 走看看