JavaScript整数最多可达2 ^ 53,但所有位操作最多只能达到2 ^ 32。有时我需要对2 ^ 32和2 ^ 53之间的数字执行位操作,所以我必须为所有位操作编写替换函数:
这是我到目前为止所拥有的:
<link rel="stylesheet" href="//kendo.cdn.telerik.com/2016.2.607/styles/kendo.common-material.min.css" />
<link rel="stylesheet" href="//kendo.cdn.telerik.com/2016.2.607/styles/kendo.material.min.css" />
<link rel="stylesheet" href="//kendo.cdn.telerik.com/2016.2.607/styles/kendo.default.mobile.min.css" />
<script src="//kendo.cdn.telerik.com/2016.2.607/js/jquery.min.js"></script>
<script src="//kendo.cdn.telerik.com/2016.2.607/js/kendo.all.min.js"></script>
<div class="container" style="">
<div id="example" role="application" style="">
<div id="select" class="demo-section k-content">
<select id="size" placeholder="Skills, Designations...." style="" >
<option />
<option />to
<option />code
<option />way
<option />always
<option />easily
</select>
</div>
</div>
<div id="example1" role="application" style="">
<div id="select" class="demo-section k-content">
<select id="size1" placeholder="Location" style="" >
<option />
<option />Delhi
<option />Bangalore
<option />Jammu and kashmir
<option />ahmedabad
<option />Arunachal Pradesh
</select>
</div>
</div>
<div id="example2" role="application" style="">
<div id="select" class="demo-section k-content">
<select id="size2" placeholder="Exp(Years)" style="" >
<option />
<option />0 Year
<option />1
<option />2
<option />3
<option />4
</select>
</div>
</div>
<div id="example3" role="application" style="">
<div id="select" class="demo-section k-content">
<select id="size3" placeholder="Salary" style="
">
<option />
<option /><1 Lac
<option />2
<option />3
<option />4
</select>
</div>
</div>
</div>
<script>
$(document).ready(function() {
// create ComboBox from input HTML element
// create ComboBox from select HTML element
$("#size").kendoComboBox();
$("#size1").kendoComboBox();
$("#size2").kendoComboBox();
$("#size3").kendoComboBox();
var select = $("#size").data("kendoComboBox");
var select = $("#size1").data("kendoComboBox");
var select = $("#size2").data("kendoComboBox");
var select = $("#size3").data("kendoComboBox");
});
</script>
这是实现班次功能的最佳方式吗?
我现在需要实施function lshift(num, bits) {
return num * Math.pow(2, bits);
}
function rshift(num, bits) {
return Math.floor(num / Math.pow(2, bits));
}
和&
。在我的代码中,我经常需要|
127和128但我不确定如何这样做。
我不需要&
或~
,但我认为它们可以包含在答案中以便完整。
答案 0 :(得分:2)
一般性评论:保持所有数字为正,以避免1补充问题似乎是有道理的。
对于lshift函数,我不确定如果移位不会溢出32位而做一些检查是否会得到回报,并且在这种情况下使用常规移位操作:它可能会减少复杂的操作,但它会还添加了支票和分支......
function and(a, b) {
var low = a & b & 0x7fffffff;
if (a <= 0x7fffffff || b <= 0x7fffffff) {
return low;
}
var hi = rshift(a, 31) & rshift(b, 31);
return low + lshift(hi, 31);
}
function or(a, b) {
var low = (a | b) & 0x7fffffff;
if (a <= 0x7fffffff && b <= 0x7fffffff) {
return low;
}
var hi = rshift(a, 31) | rshift(b, 31);
return low + lshift(hi, 31);
}
function xor(a, b) {
var low = (a ^ b) & 0x7fffffff;
if (a <= 0x7fffffff && b <= 0x7fffffff) {
return low;
}
var hi = rshift(a, 31) ^ rshift(b, 31);
return low + lshift(hi, 31);
}
function rshift(num, bits) {
return num <= 0x7fffffff ? num >> bits :
Math.floor(num / Math.pow(2, bits));
}
编辑:修正了或添加xor
中的错误