草庐IT

bit-manipulation

全部标签

javascript - 创建此号码的最快方法?

我正在编写一个函数来将带符号的数字扩展到更宽的位长。这是PowerPC指令集中非常常用的操作。这是我目前所拥有的:functionexts(value,from,to){return(value|something_goes_here);}value是整数输入,from是value使用的位数,to是目标位长。创建一个数字的最有效方法是什么,该数字将to-from位设置为1,然后将from位设置为0?忽略JavaScript没有0b数字语法的事实,例如,如果我调用exts(0b1010101010,10,14)我希望函数将值与0b11110000000000进行或运算,返回0b11111

javascript - 按位运算 - 零填充右移(>>>)用法?

一般来说,位移位(>>,)允许我们除/乘以^2示例:9(base10):00000000000000000000000000001001(base2)--------------------------------9>>2(base10):00000000000000000000000000000010(base2)=2(base10)对于负数:同样,-9>>2产量-3,因为符号被保留了:-9(base10):11111111111111111111111111110111(base2)---------------------------------9>>2(base10):1111

javascript - 如何检测输入字段中的非 "GSM 7 bit alphabet"字符

我正在尝试检测文本输入字段是否包含任何不属于GSM7位字母表的字符。带有字符的表格在这里http://www.dreamfabric.com/sms/default_alphabet.html经过大量搜索后,我发现这个(WhatregularexpressiondoIneedtocheckforsomenon-latincharacters?)非常接近我想要完成的目标,因为它检测到非拉丁字符。如何更改正则表达式以包含GSM7位字母表?testforeignchars(function(){$('#foreign_characters').on("keyup",function(){va

javascript - 按位交叉两个整数

我目前正在尝试实现一个非常简单的遗传算法示例。有一次,你必须用两个数字(parent)做一个“交叉”(生物学)来得到一个“child”。您可以在此处找到对Cross-Over的解释:Howto"crossover"twostrings(1234&abcd->12cd&ab34)(第二个例子,更简单的“一点”交叉是我正在尝试做的。)染色体(parent和child)是数字,但“交叉”将是位操作。我找到了一个“染色体”的解决方案,如下所示:向右移动X位(>>>运算符)然后再次将位移动X个位置,但这次向左移动(运算符)所以这将保留其中一条染色体的末尾并用0填充开头。但我真的不知道如何解决另一

javascript - 外部 gem 的 Assets 管道编码问题(UTF-8 与 ASCII-8BIT)

我正在尝试创建一个包装d3.js的gem,可以在https://github.com/iblue/d3-rails找到源代码所以当我将这个gem包含在我的Gemfile中时gem"d3-rails",:git=>"git://github.com/iblue/d3-rails.git"当我在application.js中包含javascript时://=required3然后我的Assets编译失败,我编译的application.js只包含throwError("Encoding::CompatibilityError:incompatiblecharacterencodings:U

javascript - 网络录音,预设: 16000Hz 16bit

functionfloatTo16BitPCM(output,offset,input){for(vari=0;i您好,我正在使用此源代码为我的学校考试录制音频。它以44100Hz和16位录制音频。我想更改录制设置以录制16000Hz和16位的音频。我尝试将函数encodeWAV中的44修改为16,但没有成功。functionencodeWAV(samples){varbuffer=newArrayBuffer(44+samples.length*2);varview=newDataView(buffer)我还尝试更改floadRToBitPCM。我试图将44更改为16,但它也没有用。

javascript - 如何在 JavaScript 中模拟 64 位(无符号)整数的按位旋转?

我需要在JavaScript中执行64位整数的循环左移。然而:JavaScript数字是双数当您从>和>>>以及~和所有的位操作开始时,JavaScript将它们转换为32位有符号整数。然后当你完成时它又回到double。我想。我不想要这个标志。而且我绝对不想要小数位。但我确实想要64位。那么,如何执行64位值的按位左旋? 最佳答案 将您的64位数字保留为单独的高分区和低分区。当Nhi_rot=((hi>>(32-N)))&(0xFFFFFFFF)lo_rot=((lo>>(32-N)))&(0xFFFFFFFF)如果N>=32,则

javascript - 如何在 Javascript 中查找两个数字之间的位差

假设我有2个数字,例如1和2。它们的二进制表示是“01”和“10”,所以它们的位差是2。对于数字5和7,二进制表示将是“101”和“111”,所以位差是1。当然我可以转换两者将数字转换为二进制,然后循环查找差异,但有没有更简单的方法。?? 最佳答案 你可以使用按位异或(^)来找出位不同的位置,将结果转换为字符串,然后统计1出现的次数在字符串中:constbitDiffCount=(a,b)=>{constbitStr=((a^b)>>>0).toString(2);returnbitStr.split('1').length-1;}

javascript - 如何将 64 位整数拆分为两个 32 位整数

我想将一个64位整数拆分为两个32位整数:varbigInt=0xffffff;varhighInt=bigInt>>8//getthehighbits0xfffvarlowInt=bigInt//cutofthefirstpart(with&)?console.log(highInt);//0xfffconsole.log(lowInt);//0xfff//setthemtogetheragainvarreBigInt=(highInt不幸的是,无论是获取highInt还是获取lowInt都不起作用...有人可以告诉我如何使用按位运算符吗?问候 最佳答案

javascript - JavaScript 中的按位异或运算符

这是为什么:console.log("1100"^"0001")=>1101//asexpectedconsole.log("1100"^"1001")=>1957//???请解释。谢谢。 最佳答案 这些数字被解释为十进制数。尝试:console.log(parseInt("1100",2)^parseInt("1001",2))当然答案(0101)是以十进制(5)打印的。JavaScript标记语法支持十进制、八进制和十六进制数字,但不支持二进制。因此:console.log(0xC0^0x09)顺便说一句,第一个成功了,因为11