如何在javascript中输入一个数字?
a = (unsigned int)atoi(arg1);
b = (unsigned int)atoi(arg2);
Run Code Online (Sandbox Code Playgroud)
假设a和b可以签名.
我想将4字节有符号整数转换为4字节无符号整数.
我知道在javascript中没有类型转换或签名/未签名的东西.我正在寻找一个易于理解的算法.
你也可以用
(new Uint32Array([arg1]))[0]
Run Code Online (Sandbox Code Playgroud)
例如
< (new Uint32Array([-1]))[0]
> 4294967295
Run Code Online (Sandbox Code Playgroud)
说明:JavaScript不遵循像C这样的传统机器架构整数转换约定,更喜欢类型简单性和可移植性而不是低级效率.然而,JavaScript中的类型数组(Uint8Array等)是专门为了有效和良好定义的多字节和位级操作而添加的.因此,我们可以利用这个事实来访问定义良好的内置位转换操作.上例中的语法:
将有符号字节转换为无符号字节,javascript:
-5 & 0xff // = 251 , signed to unsigned byte
251 <<24 >>24 // = -5 , unsinged byte to signed
Run Code Online (Sandbox Code Playgroud)
第一个使除第一个字节外的所有第一位都为 0
第二个发现于
https://blog.vjeux.com/2013/javascript/conversion-from-uint8-to-int8-x-24.html
基本上,在一个数字中,有 4 个字节。在正数中,前 3 个字节为 0,所有 0 位均为零。在负数中,前 3 个字节为 1,所有 0 位均为 1,所有 1 位均为零。以字节为单位,第 4 个字节的最高有效位用于符号;
向左移动位使第 1 个字节的第 1 位 1 成为第 4 个字节的第 1 位,然后再次向右移动,将最高有效位拖过。所以如果符号位是 1。它在前 3 个字节中有很多 1 位。所以这是转移的副作用,但它有效。
for example: like you start from
?1111111 the first bit is a sign bit - ?,
but in a larger variable, so it is:
00000000_00000000_00000000_?1111111
shift to left
?1111111_........_........_........
shift to right
????????_????????_????????_?1111111
this is the effect,
it drags the edge bit across the shift
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16319 次 |
| 最近记录: |