C# 一行中有多个作业

C# 一行中有多个作业,c#,C#,我有一个任务要在NodeJs中重写C代码。不幸的是,在这个函数中有一些我不完全理解的讨厌的单行程序 代码 问题: 我可以看到有多个赋值,但我不确定这些变量应该有什么值 有人能解释一下这一行代码和/或将其改写成更简单易懂的C代码段吗?基本上,它与 int b = byteBuffer.ReadByte(); int sign = (b >> 6) & 1; int i = b & 0x3F; int offset = 6; 详细内容: 在原始行中,每个顶级将拆分声明:

我有一个任务要在NodeJs中重写C代码。不幸的是,在这个函数中有一些我不完全理解的讨厌的单行程序

代码

问题:

我可以看到有多个赋值,但我不确定这些变量应该有什么值


有人能解释一下这一行代码和/或将其改写成更简单易懂的C代码段吗?

基本上,它与

int b = byteBuffer.ReadByte();
int sign = (b >> 6) & 1;
int i = b & 0x3F;
int offset = 6;
详细内容:

在原始行中,每个顶级将拆分声明:

int b, sign = ((b = byteBuffer.ReadByte()) >> 6) & 1, i = b & 0x3F, offset = 6;
     ^here                                          ^here         ^ here
然后你会遇到一个棘手的问题:

int b;
int sign = ((b = byteBuffer.ReadByte()) >> 6) & 1;
// ...

实际上,它首先将B定义为没有初始值,然后下一个表达式立即将“ReadByte”的结果分配给B作为第一个子操作,因此实际上它与从一开始就用它初始化B是一样的,而您最终得到的是我在第一个代码段中编写的内容。

基本上,它与

int b = byteBuffer.ReadByte();
int sign = (b >> 6) & 1;
int i = b & 0x3F;
int offset = 6;
详细内容:

在原始行中,每个顶级将拆分声明:

int b, sign = ((b = byteBuffer.ReadByte()) >> 6) & 1, i = b & 0x3F, offset = 6;
     ^here                                          ^here         ^ here
然后你会遇到一个棘手的问题:

int b;
int sign = ((b = byteBuffer.ReadByte()) >> 6) & 1;
// ...

实际上,它首先将B定义为没有初始值,但下一个表达式立即将“ReadByte”的结果分配给B作为第一个子操作,因此实际上它与从一开始就用它初始化B是一样的,最终得到的是我在第一个代码段中编写的内容。

这两个变量,既然这行声明了4个变量,那么你特别要说的是哪两个?哦,那么忽略这一行,编辑它。我以为这只是2个变量,我只是不明白它声明了4个变量。那么,假设byteBuffer是一个流,你不能简单地复制并粘贴这行代码到你的C代码中吗?它们不仅很难理解,作者似乎也让它变得更难,因为他首先声明了b变量,然后将其赋值为下一个变量声明的一部分。如果int b=byteBuffer.ReadByte,sign=b>>6&1,i=b&0x3f,offset=6;,那么它会更有意义;,也就是说,如果我们仍然想把它作为一个单行线。@RufusL是的,更清楚了;这两个变量,因为这一行声明了4个变量,你特别说的是哪两个?哦,那么忽略它,编辑它。我以为这只是2个变量,我只是不明白它声明了4个变量。那么,假设byteBuffer是一个流,你不能简单地复制并粘贴这行代码到你的C代码中吗?它们不仅很难理解,作者似乎也让它变得更难,因为他首先声明了b变量,然后将其赋值为下一个变量声明的一部分。如果int b=byteBuffer.ReadByte,sign=b>>6&1,i=b&0x3f,offset=6;,那么它会更有意义;,也就是说,如果我们仍然想把它作为一个单行线。@RufusL是的,更清楚了;天哪,我很高兴有这么一个伟大的C社区出现堆栈溢出。谢谢您的详细解释!您可以通过单击人们答案左上角的绿色复选标记来感谢他们。@DourHighArch在15分钟内不可能;天哪,我很高兴有这么一个伟大的C社区出现堆栈溢出。谢谢您的详细解释!您可以通过单击人们答案左上角的绿色复选标记来感谢他们。@DourHighArch在15分钟内不可能;