[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 }

文件格式如下:

 

posted on 2018-05-13 16:44  艰苦奋斗中 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lyh916/p/9030358.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值