运算符 << 是什么意思?从事这一行?

发布于 2024-10-29 20:56:11 字数 329 浏览 3 评论 0 原文

我无法理解这一行的作用:

fBuffer[fByteIndex] += 1 << (fBitIndex - 1);

where:

unsigned char fBuffer[32];
int fBitIndex;

and:

for ( int i = 0; i < 32; i++ )
     fBuffer[i] = 0;

fBitIndex = 8;

那里有什么 <<

I can not understand what this line does:

fBuffer[fByteIndex] += 1 << (fBitIndex - 1);

where:

unsigned char fBuffer[32];
int fBitIndex;

and:

for ( int i = 0; i < 32; i++ )
     fBuffer[i] = 0;

fBitIndex = 8;

What << does there?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

怕倦 2024-11-05 20:56:11

<< 是左移运算符,假设 fBitIndex 为 8,代码

fBuffer[fByteIndex] += 1 << (fBitIndex - 1);

相当于

fBuffer[fByteIndex] += 128;

Why?因为左移意味着将值的位“左移”;在您的例子中,00000001 (1) 向左移动 7 次,变成 10000000 (128)。

<< is the left-shift operator, and assuming fBitIndex is 8 the code

fBuffer[fByteIndex] += 1 << (fBitIndex - 1);

is equivalent to

fBuffer[fByteIndex] += 128;

Why? Because a left-shift means you shift the bits of the value "left"; in your case, 00000001 (1), is shifted left 7 times, becoming 10000000 (128).

给我一枪 2024-11-05 20:56:11

这称为位移位。每个字节由 8 位(0 或 1)组成。通过向左或向右移动一次,您可以将数字乘以 2 或除以 2。

It's called bit shifting. Each byte is composed of 8 bits (0 or 1). By shifting the bits one time to the left or the right you either multiply the number by 2 or divide it by 2.

蒲公英的约定 2024-11-05 20:56:11

这有点转变。十进制数 1 以二进制表示(仅显示低 8 位),

00000001

如果我有

int i=1;
int j=i<<1;

,那么我将采用该数字并将其向左移动一位。然后我将得到二进制

00000010

,十进制值是 2。如果我有

int j=i<<6;

,那么我会得到

01000000

十进制值 128。

It's a bit shift. The decimal number 1 is represented in binary (showing just the lower 8 bits) as

00000001

If I have

int i=1;
int j=i<<1;

then I'll be taking that number and shifting it one place to the left. I'll then have the binary

00000010

which in decimal is the value 2. If instead I had

int j=i<<6;

then I'd get

01000000

which in decimal would be 128.

半葬歌 2024-11-05 20:56:11

它设置位 fBuffer[fByteIndex]

1 << N 只是位寻址。

<<是移位运算符,1<<0 是 0b1,1<<1 是 0b10 1<<6 是 0b1000000

因此,基于 fByteIndex 和 fBitIndex ,适当的位设置为 1。

在这种情况下,使用 + 的情况是寻址位已经是1,发生溢出,但我认为在你的代码中这不是这种情况,并且地址位在赋值之前是0。

It sets bit fBuffer[fByteIndex]

1 << N is just bit addressing.

<< is shift operator and 1<<0 is 0b1, 1<<1 is 0b10 1<<6 is 0b1000000

So based on fByteIndex and fBitIndex , propper bit is set on 1.

In this case where + is used in case that addressing bit is alredy 1, overflow occure, but I think that in your code this is not case and addresd bit is 0 before assignment.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文