asp-classic - 经典 ASP 中的右移和左移运算符
问题描述
如何在经典 ASP 中使用右移运算符。正如 在 ASP、位运算符左移和右移中所建议的那样,我使用“\”作为右移运算符。它给了我错误的结果。
例如在 javascript 中,33555758 >> 24 给出结果 2。但在 Classic ASP 中,33555758 \ 24 给出除法结果。
请帮助我。
解决方案
按位右移>>
不等于简单除以\
给定数字,而是除以给定次数除以整数 2,即二进制 10。位移位将一组位中的每个数字向右移动。即除以二进制 10 会从数字中删除一个二进制数字并将数字右移。
示例:5 >> 1 = 2
5 00000000000000000000000000000101
5 >> 1 00000000000000000000000000000010 (2)
与 5 / 2 相同,
即在你的情况下,它不会是33555758 \ 24
24 次除以 2。由于 vbscript 中没有直接方法,因此可以这样做
Function SignedRightShift(pValue, pShift)
Dim NewValue, PrevValue, i
PrevValue = pValue
For i = 1 to pShift
Select Case VarType(pValue)
Case vbLong
NewValue = Int((PrevValue And "&H7FFFFFFF") / 2)
If PrevValue And "&H80000000" Then NewValue = NewValue Or "&HC0000000"
NewValue = CLng(NewValue)
Case vbInteger
NewValue = Int((PrevValue And "&H7FFF") / 2)
If PrevValue And "&H8000" Then NewValue = NewValue Or "&HC000"
NewValue = CInt("&H"+ Hex(NewValue))
Case vbByte
NewValue = Int(PrevValue / 2)
If PrevValue And "&H80" Then NewValue = NewValue Or "&HC0"
NewValue = CByte(NewValue)
Case Else: Err.Raise 13 ' Not a supported type
End Select
PrevValue = NewValue
Next
SignedRightShift = PrevValue
End Function
并用作
x = SignedRightShift(33555758, 24)
有关更多信息,请参阅http://chris.wastedhalo.com/2014/05/more-binarybitwise-functions-for-vbscript/
推荐阅读
- arduino - CASE 步进红外遥控器和 Arduino
- variables - 初始化变量 OCaml
- java - 检查Java中的图像是否为空白
- excel - 在excel中将持续时间减少一个百分比
- python - Pandas 和 scikit-learn: ValueError: Input contains NaN, infinity or a value too large for dtype('float64')
- javascript - RegExp 构造函数转义斜杠字符但不转义点
- python - firebase_admin 在 Python 中工作,但无法导入 Python Flask 文件
- python - 返回值不正确,没有得到“真”返回,Python
- leveldb - 两个不同的程序可以同时连接到一个LevelDB吗?
- amazon-web-services - auth0 机器对机器身份验证的 AWS Cognito 等效项