Testing if an integer is an uppercase ASCII letter using bit manipulation

后端 未结 4 770
南方客
南方客 2021-01-28 11:35

For an assignment, I\'m trying to make some code in C that uses only bit manipulation to test if an integer is an ASCII uppercase letter. The letter will be given by its ASCII c

4条回答
  •  花落未央
    2021-01-28 12:33

    ... to see if a letter is uppercase

    Simplification: Let us assume ranges [A-Z] and [a-z] char differ by the same value which is a power of 2. So 'B'-'b' equals 'X'-'x', etc.

    #define CASE_MASK ('A' ^ 'a')
    
    // Is letter uppercase?
    int is_letter_upper(int ch) {
       return (ch & CASE_MASK) == ('A' & CASE_MASK);
    }
    
    // Is letter lowercase?
    int is_letter_lower(int ch) {
       return (ch & CASE_MASK) == ('a' & CASE_MASK);
    }
    

    This works for ASCII and EBCIDIC

    A more "bit manipulation" answer

    int is_letter_upperBM(int ch) {
       return !((ch & CASE_MASK) ^ ('A' & CASE_MASK));
    }
    

提交回复
热议问题