如果整數大于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
6
int T[]={1,0,-1};
7
8
int sign(int x)
9
{
10
int index1=SIGN(x);
11
int index2=SIGN(x-1);
12
return T[index1+index2];
13
}
14
int main()
15
{
16
int x=-0;
17
18
printf("%d\n",sign(x));
19
20
return 0;
21
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21
