荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjk (继续努力), 信区: Program
标  题: Re: 反转 位有没有更好方法?
发信站: 荔园晨风BBS站 (Wed Apr 16 12:53:26 2003), 站内信件


int invert(int bit)
{
   int a=0xffff;
   return (a^i);
}

解释一下: 利用了C/C++中的异或。

【 在 cycker (TryToDoEverythingOnLinux) 的大作中提到: 】
: 就是把0转为1,1转为0,总觉得我的方法繁了点.
: /*Exercise 2-7. Write a function invert(x,p,n) that
:  returns x with the n bits that begin at position p
: inverted (i.e., 1 changed into 0 and vice versa),
: leaving the others unchanged.*/
: #include <stdio.h>
: int invert(int x, int p, int n);
: int main()
: {
:         int i=0x0f0f0f0f;
:         printf("%x\n", invert(i, 0, 32));
: }
: int invert(int x, int p, int n)
: {
:         int i;
:         int tmp = 0;
:         int LEN_OF_INT = sizeof(int)*8;
:         if( p < 0 || p >= LEN_OF_INT || n <= 0) return 0;
:         printf("here\n");
:         for(i=0;i<n && p+i<LEN_OF_INT;i++)
:         {
:                 tmp = (x >> (LEN_OF_INT - i - p - 1)) & 01;
:                 tmp = tmp << ( LEN_OF_INT - i - p -1);
:                 if((x & tmp) != 0)
:                 {
:                         x &= ~tmp;
:                 }
:                 else /*if( (x & tmp) == 0)*/
:                 {
:                         x |= ((~0 >> (LEN_OF_INT -i -p -1 )) & 01)\
:                          << (LEN_OF_INT - i - p -1);
:                 }
:         }
:         return x;
: }


--
  阅读历史吧,试着将你的眼光扩展到一千年之远--从永恒的观点来看,
           你将会发现“你的”烦恼将是多么微不足道。

※ 修改:·jjk 於 Apr 16 12:58:15 修改本文·[FROM: 192.168.0.234]
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.234]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店