前端开发一枚,最近有个需求需要将android端的功能移植到h5上,对java中(byte)的强制转换原理看得云里雾里,希望有大佬可以提供一些靠谱的相关文章
前端开发一枚,最近有个需求需要将android端的功能移植到h5上,对java中(byte)的强制转换原理看得云里雾里,希望有大佬可以提供一些靠谱的相关文章
如边城所说,在javascript中没有int、char类型概念的。
你的 int a = 178
,(byte)a
结果以int
输出为-78
,其实是这个数的直接低8位(一个字节中)的编码。
本身178
在int
类型(现在普遍是4字节长,起码也是2字节长)中的编码是0000000 00000000 00000000 10110010
,在处理为(byte)a
时,保留了10110010
部分,且在以有符号(byte)类型显示(相当于C/C++ 中的char
型,其值范围是-128 至 127)时,因为最高位为符号位,为1表示负值,其余部分是负值部分的补码,为0110010
,对应的数据原码为1001110
(一个负数值原码、反码、补码的关系是:反码=按位取反(源码),补码=反码+1 ),这个原码对应的数字是78
,所以整个10110010
对应数字-78
。
不过涉及这样运算的一般会用位运算来处理,而不会关注具体这个编码显示数据,即在处理中一般会用到10110010
这样的二进制信息,而不关注这个信息在十进制下面向人以char/byte
的显示值。此外大多数使用位、byte的环境实例中,即使要用数据进行计算,也大多数是基于无符号系统的,比如计算机表示RGB颜色时,每个8bit的单独颜色值就是8位无符号数,类似的还有透明度数据,真正用到位运算、byte处理中很少是有符号的值。
8 回答5.8k 阅读✓ 已解决
9 回答9.2k 阅读
6 回答4.7k 阅读✓ 已解决
5 回答3.5k 阅读✓ 已解决
12 回答5.9k 阅读
3 回答10.3k 阅读✓ 已解决
4 回答7.9k 阅读✓ 已解决
javascript 中的数值类型没有严格区分 int, byte, long ……,只有一个 number,可以表示整数,也可以表示浮点数(参考:安全整数)。
JS 中如果一个数在 -128 ~ 127 之间,就可以认为是一个 byte,如果在 0~255 之间就可以认为是一个无符号 byte……
当然,一般要用 byte 的时候,通常都是为了进行二进制数据处理,会以数组的形式存在。在 JS 中进行二进制数组处理,可能需要使用 ArrayBuffer,或者更具体一点的 Int8Array 来处理。有可能还会用到 DataView
如果只是作为二进制数据来用,整数的 178 和 byte 的 -78 都可以用
0xb2
来表示……当二进制数据来用的时候是不需要转换的。如果非要转换的话,这样:如果能保证数值都在 255 以内(不能保存也无所谓,只要允许数据截断),可以这样