答案 0 :(得分:2)
十进制中的值3051
是二进制的101111101011
。如果将它分成如下四位segmens:1011 1110 1011
,您会看到最低的四位在您想要的八位之上重复。原因是你没有掩盖应该是前四位的值。
所以不要这样:
(c >> 4) | ((c & 0x0f) << 4)
或类似的东西:
((c >> 4) | (c << 4)) & 0xff
你只需要这个:
(c >> 4) | (c << 4)
答案 1 :(得分:1)
你很可能做拥有正确的数字,但是你使用%d
打印它而不用将转换为int(或者其他有趣的东西)你展示它的方式)。
我之所以这样说是因为(3051 & 235) == 235
,这不太可能是随机发生的巧合。
答案 2 :(得分:0)
您只显示了8位,这意味着最大可能值为2 8 -1,结果为255。
二进制中的3051是:1011 1110 1011,所以为了得到这个,你显然已经将最不重要的nybble复制到了第三个nybble中。