• C# 利用位运算传递多个参数方法


    前言

    在工作中用sendMessage的方法向另外一个进程中传递窗体的位置,长度,宽度四个值,但是sendMessage的方法签名中只有两个参数。于是在网上找到了一些代码,找到了这个利用位运算来合并参数的方法。、

    代码

    // 这个方法只接受一个参数
    void  ConnectFn(int a)
    {
        int first = a >> 16;
    	int second = (first << 16) ^ a;
    	Console.WriteLine("firstparam:{0},secondParam:{1}",first,second);
    }
    
    // 需要传递的两个参数
    int firstParam = 123;
    int secondParam = 456;
    
    
    int intermediateParam = firstParam << 16 | secondParam;
    
    // 传入参数
    ConnectFn(intermediateParam);
    

    原理

    总体的思路就是将int的32位拆成两部分,分别储存两个数,这其实也对储存数字的大小产生了限制。

    • 先将 firstParam 的 123 的值 转换为二进制为1111011
    • 将这个值左移16位 得到的值为11110110000000000000000
    • 再跟第二个参数456111001000进行或运算(1 | 1 = 1 ;0| 1 = 1; 0 | 0 = 0),相当于将第二个的参数值复制到空白的16位上。

    这样就将两个参数合并了成一个参数

    • 在解析的时候,先将中间参数左移16位得到的就是1111011
    • 然后将得到的1111011右移16位,再次得到11110110000000000000000
    • 1111011000000000000000011110110000000111001000 进行异或运算(0 ^ 0 = 0; 1 ^ 1 = 0; 0 ^ 1 = 1 )

    这样就完成了一个参数承载两个变量的任务了

  • 相关阅读:
    ORACLE表空间管理维护
    oracle表分区详解
    Jquery
    B
    A
    E
    字符串排成字典序,字符串数组
    命令,快捷键,配置
    第一个java程序
    A
  • 原文地址:https://www.cnblogs.com/MaFeng0213/p/7398020.html
Copyright © 2020-2023  润新知