【发布时间】:2015-01-28 22:50:51
【问题描述】:
我有一个我应该实现的称为字节交换的函数。这个想法是该函数采用 3 个整数(int x,int y,int z),该函数将交换 int x 的 y 和 z 字节。这些限制几乎仅限于按位操作(没有循环,也没有 if 语句或逻辑运算符,例如 ==)。
我认为我没有充分提出这个问题,所以我打算重新尝试
我现在明白了
byte 1 is referring to bits 0-7
byte 2 is referring to bits 8-15
byte 3 16-23
byte 4 24-31
我的函数应该接受 3 个整数输入,x、y 和 z。然后 x 上的 y 字节和 z 字节必须切换
int byteSwap(int x, int y, int z)
工作函数的ex
byteSwap(0x12345678, 1, 3) = 0x56341278
byteSwap(0xDEADBEEF, 0, 2) = 0xDEEFBEAD
我的原始代码中有一些巨大的错误,即我认为一个字节是 2 位而不是 8 位。我正在努力解决的主要问题是我不知道如何访问这些位在给定字节内。例如,当我得到字节 4 和 5 时,我如何访问他们尊重的位?据我所知,我找不到给定字节与其起始位之间的数学关系。我假设我必须先转换然后屏蔽,然后将它们保存到变量中。尽管我什至无法做到这一点。
【问题讨论】:
-
我不清楚它应该如何工作。如果您发布 1-2 个符合您标准的 x、y 和 z 示例,将会很有用。
-
在
=运算符的左侧进行强制转换通常表明您做错了。 -
添加了一些编辑来展示它应该如何工作的例子。希望现在一切都更清楚了,很抱歉造成混乱
-
嗯,每个字节有 8 位,而不是 2。这个想法是从哪里来的?
-
@LeeDanielCrocker 不确定。感谢您指出这一点
标签: c