这两个问题需要从计算机的结构方面去考考虑。
1、
int isAsciiDigit(unsigned char x)
{
unsigned char L,H;
//先判断 x-0x30是否>0,是L=1,否L=0
L =x +( ~0x30 + 1);
L = !(0x80 & L); //负数则为0
//再判断 0x39-x是否>0,是H=1,否H=0
H = 0x39 + (~x +1);
H = !(0x80 & H); //负数则为0
return (H & L);
}
//如果x为16位数则0x80要相应的改为 0x8000,32位 0x80000000
2、
unsigned char conditional(unsigned char x,unsigned char y,unsigned char z)
{
unsigned char tmp;
tmp = !x;
tmp = ~tmp;
tmp = tmp + 1;
//上面这段,x>0则 tmp = 0x00,否则为 0xFF;
return ((~tmp & y) | (tmp & z));
}
//x也可以是16位,32位,抑或更多。
供您参考
int isAsciiDigit(int x)
{
int y;
int z;
int w;
int t;
y=x & 0x20;
z=x & 0x10;
w=x & 0x08;
t=x & 0x06;
if(!y) {return 0;}
if(!z) {return 0;}
if(!w) {return 1;}
if(t) {return 0;}
return 1;
}
int condition(x,y,z)
{
if(x) return y;
return z;
}
第一个很简单,只给出公式(函数体):
if(x&~0X39)
return(0);
else return(1);
第二个:
comditial(int a,int b,int c)
{if(a)return(b);else return(c);
}