Javascript 或0x80的作用是什么?

Javascript 或0x80的作用是什么?,javascript,bit-manipulation,bitwise-operators,Javascript,Bit Manipulation,Bitwise Operators,在按位运算中,| 0x80做什么?我知道&0xFF是将值转换为8位整数,但是| 0x80呢? 我有以下代码: const buf = createHash('sha256').update('test').digest() for (let i = 0; i < n; i++) { const ubyte = buf.readUInt8(i) const shifted = (ubyte >> 1) | mask destBuf.writeUInt

在按位运算中,| 0x80做什么?我知道&0xFF是将值转换为8位整数,但是| 0x80呢? 我有以下代码:

const buf = createHash('sha256').update('test').digest()

  for (let i = 0; i < n; i++) {
    const ubyte = buf.readUInt8(i)
    const shifted = (ubyte >> 1) | mask
    destBuf.writeUInt8(shifted, i)


    mask = (ubyte & 1) * 0x80 // mask is 0 or 128
  }

有人能给我解释一下吗?

它将两个参与的数字的位与逻辑or组合在一起:

常数b=0x7; 功能tsta,b{ console.loga.toString2.padStart8+第一个数字:+a console.logb.toString2.padStart8+第二个数字:+b console.loga | b.toString2.padStart8+位叠加:+a | b console.log-- }
[0x80,0x6A,0x70,0x8f]。forEacha=>tsta,b它将两个参与数字的位与逻辑or组合:

常数b=0x7; 功能tsta,b{ console.loga.toString2.padStart8+第一个数字:+a console.logb.toString2.padStart8+第二个数字:+b console.loga | b.toString2.padStart8+位叠加:+a | b console.log-- } [0x80,0x6A,0x70,0x8f].forEacha=>tsta,b0x。。。意味着接下来是一个十六进制数。 0x80是数字128的十六进制表示形式。在二进制中,这等于1000000

|字符是按位or运算符。假设您有一个8位数字:

a = xxxxxxxx
x是0或1。现在,用0x80屏蔽这个数字意味着:

因此,它基本上意味着最左边的有效位将有一个1,而所有其他位保持不变

现在,在代码中,您在以下行中使用此掩码:

const shifted = (ubyte >> 1) | mask
这样做的目的是获取ubyte的数字:

它将其右移一位数:

ubyte >> 1 = zxxxxxxx // y gets lost, and z is a 0 if ubyte was unsigned.
现在它用你的面具遮住了这个数字。当掩码为128时,结果为:

(ubyte >> 1) | 10000000 = 1xxxxxxx
因此,最高有效位为1,其他位不变。

0x。。。意味着接下来是一个十六进制数。 0x80是数字128的十六进制表示形式。在二进制中,这等于1000000

|字符是按位or运算符。假设您有一个8位数字:

a = xxxxxxxx
x是0或1。现在,用0x80屏蔽这个数字意味着:

因此,它基本上意味着最左边的有效位将有一个1,而所有其他位保持不变

现在,在代码中,您在以下行中使用此掩码:

const shifted = (ubyte >> 1) | mask
这样做的目的是获取ubyte的数字:

它将其右移一位数:

ubyte >> 1 = zxxxxxxx // y gets lost, and z is a 0 if ubyte was unsigned.
现在它用你的面具遮住了这个数字。当掩码为128时,结果为:

(ubyte >> 1) | 10000000 = 1xxxxxxx
因此,最高有效位为1,其他位不变。

|按位or运算符是否理解&0xFF将值转换为8位整数的原因?关于| 0x80 |是按位or运算符吗?您理解为什么&0xFF将值转换为8位整数吗?与| 0x80相同