lua基础之位操作

Lua 位和字节 Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)如果觉得本篇博文对你有所启发或是解决了困惑,。公众号搜索 “江澎涌”,更多优质文章会第一时间分享与你。 阅读详情

Bitwise operations

bit.tobit(x)

将数字规范化为位操作的数字范围并返回它。 通常不需要此函数,因为所有位操作都已经规范化了它们的所有输入参数。

参数

x number number to normalize

返回值

y number normalized number

例子

print(0xffffffff) --> 4294967295 (*)
print(bit.tobit(0xffffffff)) --> -1
printx(bit.tobit(0xffffffff)) --> 0xffffffff
print(bit.tobit(0xffffffff + 1)) --> 0
print(bit.tobit(2^40 + 1234)) --> 1234


bit.tohex(x,n)

将其第一个参数转换为十六进制字符串。 十六进制数字的数量由可选的第二个参数的绝对值给出。 1 到 8 之间的正数生成小写的十六进制数字。 负数生成大写的十六进制数字。 只有最不重要的 4*|n| 位被使用。 默认是生成 8 个小写的十六进制数字。

参数

x number number to convert
n number number of hex digits to return

返回值

s string hexadecimal string

例子

print(bit.tohex(1)) --> 00000001
print(bit.tohex(-1)) --> ffffffff
print(bit.tohex(0xffffffff)) --> ffffffff
print(bit.tohex(-1, -8)) --> FFFFFFFF
print(bit.tohex(0x21, 4)) --> 0021
print(bit.tohex(0x87654321, 4)) --> 4321


bit.bnot(x)

返回其参数的按位非。

参数

x number number

返回值

y number bitwise not of number x

例子

print(bit.bnot(0)) --> -1
printx(bit.bnot(0)) --> 0xffffffff
print(bit.bnot(-1)) --> 0
print(bit.bnot(0xffffffff)) --> 0
printx(bit.bnot(0x12345678)) --> 0xedcba987


bit.bor(x1,[x2…])

返回其所有参数的按位或。 请注意,允许使用两个以上的参数。

参数

x1 number number
[x2…] number number(s)

返回值

y number bitwise or of the provided arguments
例子

print(bit.bor(1, 2, 4, 8)) --> 15


bit.band(x1,[x2…])

返回其所有参数的按位和。 请注意,允许使用两个以上的参数。

参数

x1 number number
[x2…] number number(s)

返回值

y number bitwise and of the provided arguments

例子

printx(bit.band(0x12345678, 0xff)) --> 0x00000078


bit.bxor(x1,[x2…])

返回其所有参数的按位异或。 请注意,允许使用两个以上的参数。

参数

x1 number number
[x2…] number number(s)

返回值

y number bitwise xor of the provided arguments

例子

printx(bit.bxor(0xa5a5f0f0, 0xaa55ff00)) --> 0x0ff00ff0


bit.lshift(x,n)

通过第二个参数给定的位数返回其第一个参数的按位逻辑左移。 逻辑移位将第一个参数视为无符号数并移位 0 位。 仅使用移位计数的低 5 位(减少到范围 [0…31])。

参数

x number number
n number number of bits

返回值

y number bitwise logical left-shifted number

例子

print(bit.lshift(1, 0)) --> 1
print(bit.lshift(1, 8)) --> 256
print(bit.lshift(1, 40)) --> 256
printx(bit.lshift(0x87654321, 12)) --> 0x54321000


bit.rshift(x,n)

通过第二个参数给定的位数返回其第一个参数的按位逻辑右移。 逻辑移位将第一个参数视为无符号数并移位 0 位。 仅使用移位计数的低 5 位(减少到范围 [0…31])。

例子

x number number
n number number of bits

返回值

y number bitwise logical right-shifted number

例子

print(bit.rshift(256, 8)) --> 1
print(bit.rshift(-256, 8)) --> 16777215
printx(bit.rshift(0x87654321, 12)) --> 0x00087654


bit.arshift(x,n)

通过第二个参数给定的位数返回其第一个参数的按位算术右移。 算术右移将最高有效位视为符号位并复制它。 仅使用移位计数的低 5 位(减少到范围 [0…31])。

例子

x number number
n number number of bits

返回值

y number bitwise arithmetic right-shifted number

例子

print(bit.arshift(256, 8)) --> 1
print(bit.arshift(-256, 8)) --> -1
printx(bit.arshift(0x87654321, 12)) --> 0xfff87654


bit.rol(x,n)

按第二个参数给定的位数返回其第一个参数的按位左旋转。 从一侧移出的位在另一侧移回。 仅使用循环计数的低 5 位(减少到范围 [0…31])。

例子

x number number
n number number of bits
返回值

y number bitwise left-rotated number

例子

printx(bit.rol(0x12345678, 12)) --> 0x45678123


bit.ror(x,n)

按第二个参数给定的位数返回其第一个参数的按位右旋。 从一侧移出的位在另一侧移回。 仅使用循环计数的低 5 位(减少到范围 [0…31])。

例子

x number number
n number number of bits

返回值

y number bitwise right-rotated number

例子

printx(bit.ror(0x12345678, 12)) --> 0x67812345


bit.bswap(x)

交换其参数的字节并返回它。 这可用于将小端 32 位数字转换为大端 32 位数字,反之亦然。

例子

x number number

返回值

y number bitwise swapped number

例子

printx(bit.bswap(0x12345678)) --> 0x78563412
printx(bit.bswap(0x78563412)) --> 0x12345678

位运算和lua中bit模块 一、位运算 与:两个位都为1时,结果才为1 或:两个位都为0时,结果才为0 异或:两个位相同为0,相异为1 取反:1变0,0变1 左移:各二进位全部左移若干位,高位丢弃,低位补零 左移的作用:若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2 右移:各二进位全部右移若干位,正数左补0,负数左补1,右边丢弃 右移的作用:操作数每左移一位,相当于该数乘以2 二、lua中位操作 bit.band() --与 bit.bor() --或 bit.bxor() 阅读详情

相关推荐

lua不同版本的位操作

lua版本 Lua51 lua52 lua53 来源 bitlib.dll 内置bit32库 内置操作符 引入 require "bit" require "bit32" 按位与 bit.band(a,b) bit32.band(a,b) a & b 按位或 bit.bor(a,b) bit32.bor(a,b) a | b 按位取反 bit.bnot(a) bit32.bn.

zuig2的专栏 1204

lua学习笔记之位及字节

1、位操作 & 位与 | 位或 ~ 位取反(异或) >> 逻辑右移 << 左移

多看多听多总结 3236

LuaBit 对于LUA语言位操作符LUA语言实现,依赖于LUA Number的定义。(可参看未定义的实现部分)

//位操作运算不能对浮点型进行操作。在进行位操作时进行检查 local function check_int(n) -- checking not float if(n - math.floor(n) > 0) then error("trying to use bitwise operation on non-integer!") end end //把LUA Number转换成位模

sunning9001的专栏 1681

Lua学习笔记:分享一个用纯Lua写的位操作(异或)

【代码】Lua学习笔记:分享一个用纯Lua写的未操作(异或)

孙君的空间站 1684

Lua BitOp 提供5.1和5.2版本位操作运算 (跨平台C语言实现 说明部分1)

BitOp作为The LuaJIT Project中的一个子项目。 Lua BitOp is a C extension module for Lua 5.1/5.2 which adds bitwise operations on numbers. Features 特点: 支持的位运算符: Supported functions: bit.tobit, bit.tohex, bit.b

sunning9001的专栏 3390

Lua位操作与文件系统操作实践

本篇博文介绍了Lua中的BitOp库和LuaFileSystem库的使用。BitOp库提供位操作功能,弥补了Lua语言本身对位操作支持的不足。而LuaFileSystem库则用于文件和目录操作,补充了Lua标准库的文件系统功能。通过实例代码和具体用法的介绍,本文将为读者提供深入理解和应用这两种库的方法。

weixin_30995917的博客 1031

Lua不同版本下的位操作

Lua历经几个大的版本变更,每个版本对应的位操作方式也是略有不同,本文主要记录lua 5.0 版本之后的各种位操作方法。

zuimrs的博客 1万+

01-嵌入式入门-如何看原理图

最近由于找到的工作是偏于嵌入式方向,因此又重新开始学习已经丢弃两年的知识。新手学习知识感觉有一个通病:喜欢收集各种各样的视频、资料,网盘里收藏一大堆,但是却从没有打开看过,到头来还是个小白,只听说过几个概念,而实际却是不知所云,这就是所谓的"学习综合征"。而我也是其中的一员,最近痛定思痛,就准备根据一套资料沉下心学习下去,不再进入收集资料的大军。...

weixin_34010566的博客 4484

Lua位操作

在用redis写排行榜的时候,相同积分的情况要按照到达时间排序,用到了Lua的位操作,网上很少这方面的资料,写一下做简单笔记。 lua位操作其实和c语言一样,例子如下: 结果为: 实际应用可以看看我的另一篇博客,《使用redis做排行榜相同积分情况下,如何使用到达时间来排序》 ...

班门弄斧 2706

Time-Interleaved Analog-to-Digital Converters

  这篇论文提供了时间交错模数转换器的教程回顾。在解释了偏置、增益、定时和其他不匹配对变换器性能的影响后,给出了目前解决不匹配问题的方法。论文最后总结了时间交错模数转换器的现状。 1.简介   时间交错模数转换器(ADC)将多个子ADC组合成一个ADC系统,可以实现比单独的子ADC[1]更快的采样速率。历史上,时间交错adc的主要缺点是需要紧密匹配子adc[2]的特性。近年来,由于应用需要非常宽带信号的数字化、功率高效子adc的可用性以及由深亚微米互补金属氧化物硅(CMOS)技术实现的微调技术,使得时间交错

weixin_44537056的博客 6731

智能车图像处理去畸变+逆透视教程

图像处理,去畸变与逆透视整合

wu58430的博客 1万+

cocos2d-x lua 位操作

原生lua没有位操作,这大家都知道,官方了知道,也提供了位操作的算法,在cocos/cocos2d/bitExtend.lua 一定有人不知道这个,只是这里没有提供异或,这里给大家补上 function bit._xor(a,b) local op1=bit._d2b(a) local op2=bit._d2b(b) local r={}

to3 779

FANUC机器人有关动作速度倍率的相关系统变量-解释说明

FANUC机器人有关动作速度倍率的相关系统变量-解释说明 1.$SHFTOV_ENB 默认值:0 名称:位移倍率的有效/无效 含义:位移倍率功能,通过按住SHIFT键的同时按下倍率键,将速度倍率更改为5档 设定值:有效1; 无效0. 有SHFIT键:微速–低速–5%–50%–100% 2.MCRGRP[GROUP].MCR_GRP[GROUP].MCRG​RP[GROUP].PRGOVERRIDE 默认值:100 名称:程序倍率 含义:设定程序再生时的、机器人动作速度比率 设定值:0~100(%) 3.S

Robot_PLC_HMI_Automation 9321

Lua 5.1 位操作(与,或,异或操作)

由于lua5.1不支持位操作,自己写了一个lua的位操作函数,代码如下: 方法1: function Xor(num1,num2) local tmp1 = num1 local tmp2 = num2 local str = "" repeat local s1 = tmp1 % 2 local s2 = tmp2 % 2 if s1 == s2 then st...

Eric_ 2万+

基于深度学习的目标检测在 Android 端的优化实现:YOLO Mobile × NPU 加速实战教程

随着国产手机芯片日益强大,终端侧的目标检测任务已经具备实用性基础。本文围绕实际工程场景,详细讲解如何在 Android 应用中部署轻量级目标检测模型(如 YOLO Mobile、EfficientDet Lite),并结合国产手机 NPU 能力,实现高性能、低延迟、实时目标检测系统。文章将涵盖从模型选择、结构优化、量化转换到 Android 上推理加速、UI 实时渲染的全链路工程路径,强调每一环节的真实可复现性与部署细节,适合 AI 工程师、移动开发者及企业级应用落地团队参考使用。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1410

ANSYS专题-利用ANSYS SIwave进行PCB板的EMS仿真

本文详细描述了使用ANSYSSIwave进行电路板电磁敏感度(EMS)仿真的完整流程。主要步骤包括:导入AD软件生成的IPC2581文件,检查PCB叠层和电路参数,为敏感网络设置50欧姆端口并指定GND为参考网络,进行验证检查后设置频段范围和入射波类型(单/多入射、极化方式等),最后启动仿真并查看选定网络的EMS感应电压曲线。该过程提供了从文件准备到结果分析的全套操作指南,适用于评估电路板在电磁干扰环境下的性能表现。

whm128的博客 3590

Lua:模块、使用位操作BitOp、C API(Lua与C互相调用)

一、模块 1.1 概述 创建一个模块最简单的方法是:         1. 创建一个table;         2. 并将所有需要导出的函数放入其中;         3. 最后返回这个table。 1.2 代码 文件:test.lua complex = {} function complex.add(x, y) return x+y end return

kanguolaikanguolaik的专栏 4373

Android16 RK3576 Bluetooth source和sink模式切换

摘要:本文介绍了在RK3576平台上实现蓝牙A2DP模式动态切换的修改方案。通过在device配置文件中添加A2DP Sink相关属性,修改Bluetooth模块代码实现:1)在Config.java中增加persist.bluetooth.rka2dpsink属性控制模式切换;2)修改A2dpSinkStreamHandler.java取消音频焦点限制;3)调整btif_a2dp_sink.cc默认授予音频焦点。最终通过设置persist.bluetooth.rka2dpsink属性为true/false

tzj1058756809的博客 860

纯Lua实现的位操作

ZZMathBit = {} function ZZMathBit.__andBit(left,right) return (left == 1 and right == 1) and 1 or 0 end function ZZMathBit.__orBit(left, right) return (left == 1 or right == 1) and 1 or 0 e

1492

Open3D 计算点云基本特征

在 Open3D 中,可以通过 PCA(主成分分析)来求得点云的特征值和特征向量。然后基于这些特征值,进一步计算各种几何特征,如线性、平面性、球度等。

纵马踏花向自由 1606

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

lua与php通用异或算法,Lua 5.1 位操作(与,或,异或操作)

由于lua5.1不支持位操作,自己写了一个lua的位操作函数,代码如下:方法1:function Xor(num1,num2)local tmp1 = num1local tmp2 = num2local str = ""repeatlocal s1 = tmp1 % 2local s2 = tmp2 % 2if s1 == s2 thenstr = "0"..strelsestr = "1".....

weixin_39676633的博客 563

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

quick_lua之位操作(源码)

quick中的bit文件中只有这6个接口:bit_b2d(arg)    ->二进制转十进制:bit_d2b(arg)    ->十进制转二进制:bit_and(a, b)   ->与操作:bit_rshift(a, n) ->左移n位操作: bit_not(a)     ->非操作:bit_or(a, b)   ->或操作 1 -- bit ope...

weixin_30604651的博客 202

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

lua位操作(感觉这效率较低)

--[[ Description: FileName:bit.lua This module provides a selection of bitwise operations. History: Initial version created by 阵雨 2005-11-10. Notes: .... ]] --[[{2147483648,107...

aobu0171的博客 129

lua 实现位操作代码及案例

bit = bit or {} bit.data32 = {} for i=1,32 do bit.data32[i]=2^(32-i) end function bit._b2d(arg) local nr=0 for i=1,32 do if arg[i] ==1 then nr=nr+bit.data32[i] ...

lpl312905509的博客 1964

Lua位操作实现CRC16算法

基于Lua5.3 function crc16(buf,len) local init = 0xFFFF; local poly = 0xA001; local ret = init; local byte=0; for j=1,len,1 do byte = string.byte(buf,j); ret=((ret ~ byte) & 0xFFFF); for i=1,8,1 do

JJ的博客 3831
上一篇: lua基础之时间
下一篇: lua基础之table
a_codecat
博客等级 码龄4年 8粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值