このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1342966104/350
#  [1] 授業単元:プログラミング 
#  [2] 問題文: 
#  ビット単位の論理演算を用いて、scanfで読み込んだ1文字の英字の大文字を小文字に 変換する関数と、小文字を大文字変換する関数をそれぞれ作りなさい。  
#  また、char型の変数のビットの並びを表示する関数作成しなさい。  
#  ただし、ビット単位の論理演算とシフト演算子を用いることとし、 
#  四則演算(加減乗除)は使わない。  
#  例えば、文字'A'は0x41であるので、0100 0001となる。 
#  [3]環境 
#  [3.1]OS:Linux 
#  [3.2]コンパイラ:gcc  
#  [3.3]言語: C  
#  [4] 期限:8月5日  
#  [5] その他の制限: 
#  大文字→小文字にする関数では、引数の文字が大文字のときに、小文字に変換し、その他の場合は、無変換で返す関数を期待しています。 
#  この関数の外で文字判定はしません。 
#  大文字と小文字の判定に、isupperやislowerも使いません。この判定にもビット 
#  単位の論理演算を使います。  
#  isupperやislowerの代りに、各文字の上位3ビットの並びが010ならば大文字、 
#  011ならば小文字と判断します。上位3ビットを見るためには、シフト演算子を用ます。 
#  #define MASK 0x20 
#  #include <ctype.h> 
#  #include <limits.h> 
#  などは使用しません。 
#   
#  制限が多いですが、どなたかよろしくお願いします。 
# 

'引数の文字が大文字のときに、小文字に変換し、その他の場合は、無変換で返す。大文字と小文字の判定に、ビット単位の論理演算を使います。ここだけのルールとして、各文字の上位3ビットの並びが010ならば大文字、011ならば小文字と判断します。上位3ビットを見るためには、シフト演算子を用います。'(_文字_1,_文字_2) :-
        char_code(_文字_1,_文字コード_1),
        'ここだけのルールとして、各文字の上位3ビットの並びが010ならば大文字と判断します'(_文字コード_1),
        'ここだけのルールに従い、各文字の上位3ビットの並びを010から011に変えて、大文字コードを小文字コードに変換します'(_大文字コード_1,_小文字コード_2),
        char_code(_文字_2,_文字コード_2),!.
'引数の文字が大文字のときに、小文字に変換し、その他の場合は、無変換で返す。大文字と小文字の判定に、ビット単位の論理演算を使います。ここだけのルールとして、各文字の上位3ビットの並びが010ならば大文字、011ならば小文字と判断します。上位3ビットを見るためには、シフト演算子を用います。'(_文字,_文字).

'引数の文字が小文字のときに、大文字に変換し、その他の場合は、無変換で返す。小文字と大文字の判定に、ビット単位の論理演算を使います。ここだけのルールとして、各文字の上位3ビットの並びが011ならば小文字、010ならば大文字と判断します。上位3ビットを見るためには、シフト演算子を用います。'(_文字_1,_文字_2) :-
        char_code(_文字_1,_文字コード_1),
        'ここだけのルールとして、各文字の上位3ビットの並びが011ならば小文字と判断します'(_文字コード_1),
        'ここだけのルールに従い、各文字の上位3ビットの並びを011から010に変えて、小文字コードを大文字コードに変換します'(_小文字コード_1,_大文字コード_2),
        char_code(_文字_2,_文字コード_2),!.
'引数の文字が小文字のときに、大文字に変換し、その他の場合は、無変換で返す。小文字と大文字の判定に、ビット単位の論理演算を使います。ここだけのルールとして、各文字の上位3ビットの並びが011ならば小文字、010ならば大文字と判断します。上位3ビットを見るためには、シフト演算子を用います。'(_文字,_文字).


'ここだけのルールとして、各文字の上位3ビットの並びが010ならば大文字と判断します'(_文字コード) :-
        (_文字コード >> 5) =:= 0b00000010.

'ここだけのルールとして、各文字の上位3ビットの並びが011ならば小文字と判断します'(_文字コード) :-
        (_文字コード >> 5) =:= 0b00000011.

'ここだけのルールに従い、各文字の上位3ビットの並びを010から011に変えて、大文字コードを小文字コードに変換します'(_大文字コード_1,_小文字コード_2) :-
        _文字コード_2 is _文字コード_1 \/ 0b00100000.

'ここだけのルールに従い、各文字の上位3ビットの並びを011から010に変えて、小文字コードを大文字コードに変換します'(_大文字コード_1,_小文字コード_2) :-
        _文字コード_2 is _文字コード_1 /\ 0b11011111.