• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[Lua]位运算

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

参考链接: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 }

文件格式如下:

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
嵌入式语言Lua发布时间:2022-07-22
下一篇:
C++ 字符串相互转换 适合 lua project发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap