字符大小写转换

大小写字符的转换

  • ascii码表中大小写字母如下:

    大写字母 10进制 二进制 小写字母 10进制 二进制
    A 65 0100 0001 a 97 0110 0001
    B 66 0100 0010 b 98 0110 0010
    C 67 0100 0011 c 99 0110 0011
    D 68 0100 0100 d 100 0110 0100
    E 69 0100 0101 e 101 0110 0101
    F 70 0100 0110 f 102 0110 0110
    G 71 0100 0111 g 103 0110 0111
    Z 90 0101 1010 z 122 0111 1010
    结合上表,我们拿出任意一个字符, 假如是b;
      那么 :
          B(0100 0010)
          b(0110 0010)
      它们之间只有第六个二进制位的不同,在这里假设有 
          char ch1 = 'b';  char ch2 = 'B'; 
      那么 ch1的二进制码就是 0110 0010,同理 ch2为0100 0010 那么对于语句
          ch1 = ch1 & 0xDF ; //  0xDF = 二进制(1101 1111),其中0x在c语言中是16进制的标志,代表这个数是
          ch2 = ch2 & 0xDF ; //  16进制数据,& 是按位与操作,就是将两个数的二进制码的每一位都进行 与 操作
      那么 ch1、ch2 执行那条语句后的结果就是 
                      (0110 0010)          (0100 0010)
                    & (1101 1111)        & (1101 1111)
                    ---------------      --------------
                      (0100 0010)          (0100 0010)
      也就是 ch1 = (0100 0010),ch2 = (0100 0010),我们发现ch1、ch2代表的就是大写字符B的二进制码了。
      也就是对任意字符ch执行
                  ch = ch & 0xDF;
      那么ch就变成了ch字符对应的大写字符,类似,对任意字符ch执行
                  ch = ch | 0x20; // 0010 0000
      那么ch就变成了对应字符的小写字符。具体分析过程,留给读者。
      提示:对任意二进制码 0101 1001,假如我们要在第二位二进制位上存上一个1, 那么我们让其按位或上
      0000 0010就行了,也就是 (0101 1001) | (0000 0010) = (0101 1001);因为 0 | 1(或者0) = 1(或0),而 1 | 1(或者0) = 1;
      也就是按位或上0,原来的二进制位是没有变化的,但是按位或上1结果永远是1。
      	假如想把第4位的1变成0,那么(0101 1001) & (1111 0111) = (0101 0001);因为 1 & 1(或者0) = 1(或者0),
      	0 &1(或者0) = 0; 也就是按位与上1,原来的二进制位是没有变化的,但是按位与上0结果永远是0,这就是
      	计算机网络中利用网络掩码获取网络号的原理。
    
    • 一个c语言小例子
    #include <stdio.h>
    int main()
    {
        char ch;
        printf("请输入一个字符:");
        scanf("%c",&ch);
        printf("%c对应的大写字符是:",ch);
        ch = ch & 0xDF;
        printf("%c,小写字符是:",ch);
        ch = ch | 0x20;
        printf("%c\n",ch);
        return 0;
    }
    
上一篇:我没有准备好,上来就给我一击冲拳,不想说


下一篇:js 实现点击空白关闭弹框