posts - 134,comments - 22,trackbacks - 0
题目大意:
如果整数大于0则输出1;
等于0则输出0;
小于0则输出1;
要求不能用任何形式的判断语句。

思路:
设整数N,符号位可以通过如下宏得到:
#define SIGN(N) (N>>(sizeof(N)*8-1)&0x01)
那么如果N>0,符号位为0;
如果N=0,符号位为0;
N<0,符号位为1;
这样没有办法区分正数和0!

如果N>0,N和N-1的符号位之和为0;
N=0,N和N-1的符号位之和为1
N<0,N和N-1的符号位之和为2
这样可以通过查表得到输出了。

 1#include <stdio.h>
 2
 3//取得符号位
 4#define SIGN(N) (N>>(sizeof(N)*8-1)&0x01)
 5
 6int T[]={1,0,-1};
 7
 8int sign(int x)
 9{
10    int index1=SIGN(x);
11    int index2=SIGN(x-1);
12    return T[index1+index2];
13}

14int main()
15{
16    int x=-0;
17
18    printf("%d\n",sign(x));
19
20    return 0;
21}

posted on 2010-06-01 20:07 何克勤 阅读(256) 评论(0)  编辑  收藏 所属分类: C/C++Algorithm and Data Structure

只有注册用户登录后才能发表评论。


网站导航: