C语言中 byte n2 = (byte)((*pRun >> 4) & 0x0f); 是什么意思?

代码如下:求大师翻译下publicunsafestaticlongRunLCN(byte*pRun){byten1=(byte)(*pRun&0x0f);byten2=(... 代码如下:求大师翻译下
public unsafe static long RunLCN(byte* pRun)
{ byte n1 = (byte)(*pRun & 0x0f); byte n2 = (byte)((*pRun >> 4) & 0x0f); byte lcnCheck = (n2 == 0) ? (byte)0 : (byte)(pRun[n1 + n2]); bool negative = false; if ((0x80 & lcnCheck) == 0x80) // Negative. { negative = true; } // If the highest byte is a negative value (the highest bit is 1), than we should get a negative long value respectively. long lcn = negative ? (long)((0xffffffffffffffff << 8) | lcnCheck) : (long)lcnCheck; for (int i = n1 + n2 - 1; i > n1; i--) { lcn = (lcn << 8) + pRun[i]; } return lcn; }
展开
 我来答
阿瑞的小跟班2f
2015-11-03 · 超过20用户采纳过TA的回答
知道答主
回答量:87
采纳率:100%
帮助的人:43.6万
展开全部
他实现的就是*prun右移四位以后 位与上0X0f 强制转换成字符型 结果赋给n2
假设*prun是0xcf 右移四位就是0x0c 位与上0x0f结果是0x0c
追问
0x0f只是转化成字符型?不是与操作吗?
下面是我看到的解释:
byte b = i & 0x0f

如果原来的 b是: 1111111那么这个运算过程是:
11111111
00001000
&_______________
00001000
如果b的第4位(下面 8 的二进制数中为 1 的位置)是1 运算结果是1 其余是 0 也就是说 需要两个运算值的位都是 1 时 结果才是 1
追答
。。。不知道你在说什么  我说的是等号右边的(byte)是一个强制转换类型的关键字  转换后的类型是byte字符型  而且确实是只有两个字符上对应位都为1   与运算以后的结果才为一  但是0x0f 用二进制表示是0000 1111  而不是0000 1000   所以它实际上的意义只是取*prun这个字节移位后的低四位的值
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式