考虑两个nible和字符串反转,以32位数字交换位

时间:2015-05-28 14:52:16

标签: bit-manipulation

这是面试问题。请告诉我这个答案。

number-10010011.now我们需要将前两位换成第3和第4位。 输出10110001。 相同的数字,但输出10000111。

2)这是资格专访。 现在我们需要反转一个字符串。

输出 - 采访高通是这个。

但没有使用strtok库。 请告诉我如何做这个程序。 我在网上搜索但没有得到正确的答案。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

bitshift操作中的第一个问题:

right = 10010011 & 00000011 // right = 00000011
left = 10010011 & 00110000 // left = 00010000
fix = 10010011 & 11001100 // fix = 10000000 

right = right << 4 // right = 00110000
left = left >> 4 // left = 00000001
result = fix | right | left // result = 10110001

所以我做的是把比特分成那些不改变的(从左边:1,2,5,6)左边的一组(3和4)和一个右边的组(7和8)然后向左移动分组到7和8,右到3和4.然后再次组合修复,左右。

字符串反转也可以非常直接地进行,只需迭代字符串交换字符:

word = "hello world"
for(int i = 0; i <= word.Length/2; i++)
   help = word[i]
   word[i] = word[word.Length-i]
   word[word.Length-i] = help 

// dello worlh,dlllo woreh,...

对于单词反转,您也可以使用该算法(revert(string)):

reverted = revert(input)
words = reverted.split(" ")
for(int i=0; i<words.Length; i++)
  words[i] = revert(words[i])
words.join(" ")