• 华东师范大学 oj 2020 加密2


    加密2 

    Time Limit:1000MS Memory Limit:30000KB
    Total Submit:153 Accepted:88

    Description

    对一个整数(32位无符号整数)进行规则如下的加密:
    1. 低16位和高16位互换
    2. 此时的低16位按位取反
    3. 此时的高16位与低16位进行异或运算,结果存储到高16位

    现在根据加密后的整数,求出加密前的整数的16进制形式.

    Input

    输入有多case,每个case一行,且只有一个整数

    Output

    对于每个case输出一个整数(16进制形式),即加密前的整数。

    Sample Input

    4294901759

    Sample Output

    1


    hint:十六进制输出时请使用大写字母(A,B...)

    Source

    EOJ
     

    [Submit] [States] [Discuss]

    这是用位域 结构题 做的
     AC过
    #include "stdio.h"
    #include "stdlib.h"
    int main()
    {   unsigned int n,a1,a2,a3,a4,a5;

        struct
        {unsigned a1:32;
        unsigned :0;
        unsigned a2:16;
        unsigned :0;
        unsigned a3:16;
        unsigned :0;
        unsigned  a4 :16;
        unsigned :0;
        unsigned  a5:32;
       
        }a;
       while( scanf("%d",&n)!=EOF)
       
       { a1=n<<16;      //c储存后16位  注意:左移16位 后要再右移动 16 位才能得到正确的后16位,原因是
         a1=a1>>16;     //左移之后 数值变大  只有右移动之后才能将变大的数变回来
         a2=n>>16;
        
         a3=a1^a2;
         a4=~a1;
         a5=a4<<16;
         printf("%X ",a5|a3);  //最后注意一下输出  输出要以16进制输出
         }
         return 0;
      }
                                      
             
             
             
              /*//a.t1=temp&&0x0000FFFF;  //a.t1是低16位
        a.t1=temp<<16;
        a.t1=a.t1>>16;
        a.t2=temp>>16; 
        //a.t2=temp&0x0000FFFF;  //a,t2是高16位
       
        a.t3=a.t1^a.t2;
        a.t4=~a.t1;
       // a.t4=a.t4&0xffff;
        s=a.t4<<16 +a.t3;
        printf("%X ",s);
        */
       
     /*   void convert(int32 temp)
    {    uint16 t1,t2; 
      t1=temp&0x0000FFFF; 
      t2=temp>>16; 
      t2=temp&0x0000FFFF;
    }*
    }
    return 0;
    }
    /

     法二:
    #include "stdio.h"
    int main()
    {unsigned int n,a,a1,a2,a3,a4,a5;
     while(scanf("%u",&n)!=EOF)
       { a1=n<<16;     //c储存后16位  注意:左移16位 后要再右移动 16 位才能得到正确的后16位,原因是
         a1=a1>>16;  //左移之后 数值变大  只有右移动之后才能将变大的数变回来
         a2=n>>16;
        
         a3=a1^a2;
         a4=~a1;
         a5=a4<<16;
         printf("X ",a5|a3);  //最后注意一下输出  输出要以16进制输出
         }
         return 0;
         }

  • 相关阅读:
    MVC 和 MVVM
    Objective-C对象模型及应用
    面试总汇二
    iOS中常用的四种数据持久化方法简介
    iOS应用程序生命周期
    SDWebImage的总结
    面试知识点总汇
    block 的演练和使用
    Java 类 生成数据库表
    sql中写标量函数生成大写拼音首字母
  • 原文地址:https://www.cnblogs.com/songmingtao/p/3230184.html
Copyright © 2020-2023  润新知