zoukankan      html  css  js  c++  java
  • [Lua]位运算

    参考链接:https://blog.csdn.net/xiaodaidabin/article/details/7968523

    bit.lua

     1 --lua 位运算
     2 --[[bit.data32:
     3 2147483648,1073741824,536870912,268435456,134217728,67108864,33554432,16777216
     4 ,8388608,4194304,2097152,1048576,524288,262144,131072,65536
     5 ,32768,16384,8192,4096,2048,1024,512,256
     6 ,128,64,32,16,8,4,2,1--]]
     7 
     8 bit = {};
     9 bit.data32 = {};
    10 for i=1,32 do
    11     bit.data32[i] = 2 ^ (32 - i);
    12     print(bit.data32[i]);
    13 end
    14 
    15 --十进制转二进制
    16 function bit:d2b(arg)
    17     local temp = {};
    18     for i=1,32 do
    19         if (arg >= self.data32[i]) then
    20             temp[i] = 1;
    21             arg = arg - self.data32[i];
    22         else
    23             temp[i] = 0;
    24         end
    25     end
    26     return temp;
    27 end
    28 
    29 --二进制转十进制
    30 function bit:b2d(arg)
    31     local temp = 0;
    32     for i=1,32 do
    33         if (arg[i] == 1) then
    34             temp = temp + 2 ^ (32 - i);
    35         end
    36     end
    37     return temp;
    38 end
    39 
    40 --打印二进制
    41 function bit:print(arg)
    42     local temp = "";
    43     for i=1,32 do
    44         temp = temp .. arg[i];
    45     end
    46     print(temp);
    47 end
    48 
    49 --测试
    50 local temp = bit:d2b(8);
    51 bit:print(temp);
    52 print(bit:b2d(temp));

    应用场合:

    一、配置字段缩减

    如果存在多个bool型字段,则可以使用一个int型来代替,一个位代表一个字段。下面提供一个工具,其作用是对指定目录下的csv文件,计算其替代值,并保存在最后一列。

     1 using System.Collections.Generic;
     2 using System.IO;
     3 using System.Text;
     4 using UnityEditor;
     5 using UnityEngine;
     6 
     7 public class BitConvertTool {
     8 
     9     private static string configDir = Application.dataPath + "/Config";
    10 
    11     [MenuItem("Tools/BitConvert")]
    12     static void Convert()
    13     {
    14         string[] filePaths = Directory.GetFiles(configDir, "*.csv", SearchOption.AllDirectories);
    15         for (int i = 0; i < filePaths.Length; i++)
    16         {
    17             string filePath = filePaths[i];
    18             List<List<string>> result = CSVTool.Read(filePath, Encoding.Default);
    19             //CSVTool.Debug(result);
    20 
    21             //获取结果
    22             for (int j = 0; j < result.Count; j++)
    23             {
    24                 double sum = 0;
    25                 List<string> line = result[j];
    26                 for (int k = 0; k < line.Count; k++)
    27                 {
    28                     if ((j != 0) && (k != 0) && (k != (line.Count - 1)))
    29                     {
    30                         string field = line[k];
    31                         int num = int.Parse(field);
    32                         if (num == 1)
    33                         {
    34                             sum = sum + Mathf.Pow(2f, 32 - k);
    35                             //Debug.LogError(Mathf.Pow(2f, 32 - k));
    36                         }
    37                         //Debug.Log(num);
    38                     }
    39                     if ((j != 0) && (k == (line.Count - 1)))
    40                     {
    41                         result[j][k] = sum.ToString();
    42                     }
    43                 }
    44             }
    45 
    46             //写入结果
    47             CSVTool.Write(filePath, Encoding.Default, result);
    48         }
    49         Debug.Log("BitConvert Finish");
    50     }
    51 }

    文件格式如下:

  • 相关阅读:
    姐姐的vue(1)
    LeetCode 64. Minimum Path Sum 20170515
    LeetCode 56. 56. Merge Intervals 20170508
    LeetCode 26. Remove Duplicates from Sorted Array
    LeetCode 24. Swap Nodes in Pairs 20170424
    LeetCode 19. Remove Nth Node From End of List 20170417
    LeetCode No.9 Palindrome Number 20170410
    LeetCode No.8. String to Integer (atoi) 2017/4/10(补上一周)
    LeetCode No.7 Reverse Integer 2017/3/27
    LeetCode No.4 Median of Two Sorted Arrays 20170319
  • 原文地址:https://www.cnblogs.com/lyh916/p/9030358.html
Copyright © 2011-2022 走看看