关于c语言字符串转换的有关问题

关于c语言字符串转换的问题
我写了两个函数,希望实现相同的功能。就是对满足条件的字符进行替换。但是两个函数输出结果却不一样。我也不知道出什么问题了。 

1.
void encryptChar() 



int i,j,len; 

char pf; 

for(i=0;i<maxline;i++){ 

len=strlen(xx[i]); 

for(j=0;j<len;j++){ 

pf=xx[i][j]*11%256; 

if((pf<=32)||(pf>='0'&&pf<='9')) 



else 

xx[i][j]=pf; 






2.
void encryptChar() 



int i,j,len; 

for (i=0; i<maxline; i++) 



len=strlen(xx[i]); 

for(j=0;j<len;j++){ 

if ((xx[i][j]*11%256>='0' && xx[i][j]*11%256<='9') || xx[i][j]*11%256<=32) 



else 

xx[i][j]= xx[i][j]*11%256; 







第二个出的是正确的结果。为什么呢? 
我又改写了一下, 
void encryptChar() 

int i,j,len; 
char pf; 
for(i=0;i<maxline;i++){ 
len=strlen(xx[i]); 
for(j=0;j<len;j++){ 
pf=xx[i][j]*11%256; 
//if((pf<=32)||(pf>='0'&&pf<='9')) 
if((xx[i][j]*11%256<=32)||(xx[i][j]*11%256>='0'&&xx[i][j]*11%256<='9')) 

else 
xx[i][j]=pf; 




为什么第二个if就能出正确的结果呢? 

第一个if为什么就不行呢? 

第一个if修改了什么了么?

------解决方案--------------------
貌似char类型做乘法的时候溢出了吧,改成int pf或者unsigned char pf试试,然后自己做类型转换
对于xx[i][j]*11%256 >= '0',不知道编译器是怎么转换类型的,楼下继续
------解决方案--------------------
xx[i][j]*11%256是整型数,该数大于等于0且小于256,将其赋给char型变量时,如果是128~255之间时,转换后是负数(<=32),而未转换之前是正数。