荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: 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软件 网络书店