回答LZ的疑问之前先说明0x20是16进制的20,也就是10进制的32,2进制的0010 0000,
这是什么意思,为什么会选择0x20,有什么特殊性吗?
其实这个方法就是大写字母变小写,小写变大写,大小写的Ascii值正好差了32,比如小写a是10进制97,大写a是10进制65,不知道这么说LZ是否明白?

解决方案 »

  1.   

    明白
    但这这句是做干什么的,为什么要取反再与一下
    chs[i] & (~mask);
      

  2.   

    "int c = chs[i] & (~mask);//这是什么意思,为什么会选择0x20,有什么特殊性吗?"
    有特殊性,你这个方法的功能是:将一个字符串了的大写字母转化为对应的小写字母,小写字母保持原样。~mask=11011111,chs[i] & (~mask)就是屏蔽了chs[i]的左起第三位。例如A和a的做起第三位不同,因此算过之后都会得到a。因此会是上述功能。
      

  3.   

    mask的16进制是0x20,二进制表示就是0010 0000.
    (~mask)的二进制表示是1101 1111.
    chs[i] & (~mask)的意思就是,把chs[i]的bit 5置为0,相当于在chs[i]上减去32.