![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
No.3ベストアンサー
- 回答日時:
まず、どんな計算をしているか。
単項~演算子: ビット毎のNOT演算
2項&演算子: ビット毎のAND演算
それぞれ、対象を1ビットずつ演算するものです。
つまり「c と、 ( 0x7fのNOT ) の AND」 の演算をします。
ここがわからなかったら、マニュアルや参考書の演算子のところを復習しましょう。
次にどんな効果があるのか。
ビット毎のANDは、特定のビットを0にするのに、よく使われます
ANDはどちらかが0なら0になるので、
x & 0x0f
等とすると、0x0fの1になっている桁はxのまま残り、他は0になります。
この場合なら、xの下位4ビットはそのまま、それより上位ビットは0になります。
~0x7fは、 0x7f(下位7ビットが1)を反転させた状態、つまり、下位7ビットが0、それ以外が1になります。
つまり、c & ~0x7f は、 cの下位7ビットを0にして、8ビットより上はcのままにします。
# それなら 0xff80 とかでもいいのでは、という話もありますが、これだと、16ビットより大きかったら上の桁が0になってしまいます。
~なら確実に計算時の最上位まで1になるので、桁のことを考えなくてもよくなります。
ここがわからなかったら、ビット演算を復習しましょう。
最後に、それで何をしたいか。
charAtは、指定した位置の文字の文字コードを返します。これはchar型で、UNICODEになっています。
8ビットより上位が0なら、 コードは 0x0000~0x007f の範囲で、これは、いわゆる半角英数記号にあたります。
プログラムでは != 0 ですから、そうではなく、 0x0080~0xffffの文字の場合にtrueになります。
ということで、「半角英数記号かどうか」の判定に使っているのだと思います。
ここは、なかなかいい勉強方法がなさそうです。
もうちょっとスマートにできないかなぁ、とも思います
No.1
- 回答日時:
7fを反転して(08)cとビット単位の掛け算をしています。
出てくるのはcの上位バイトになります。
半角英数は上位バイト=0、下位バイトは0ではなく、
全角文字は上位、下位とも0ではありません。
よって、全角文字だけ抽出しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- Visual Basic(VBA) 指定文字を太字にするVBAを別シートのセルを指定する構文(改良について) 6 2022/08/27 22:11
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
matchesを否定文として使う方法...
-
結合した文字列をファイル名に...
-
JSPでの計算結果表示
-
VB6,論理演算子Orの使い方がわ...
-
java nビット目を読み取る
-
素朴な疑問
-
DateTimePickerに値を入れたい...
-
C言語の変数(LSB)の合わせ込...
-
hiddenの値を消したくない!
-
実行シェルからCOBOLへパラメー...
-
ResultSetの内部構造(Java)
-
byte配列→float型の値を読みlon...
-
指定した日付が何日前なのかを...
-
Javaの判定処理について
-
プログラミング java javaでプ...
-
StringBufferクラスについて
-
暗号化文字列を英数字のみにしたい
-
String型の値が大文字か小文字...
-
wsprintf関数の使い方について
-
初回のスピンボタンの挙動
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
wsprintf関数の使い方について
-
ArrayListの要素数の上限
-
BCD形式で時刻を!
-
javaのCSVデータ読込についてです
-
DateTimePickerに値を入れたい...
-
C言語の変数(LSB)の合わせ込...
-
JSPでHashMap・配列の変数の値...
-
matchesを否定文として使う方法...
-
JSPでの計算結果表示
-
hiddenの値を消したくない!
-
結合した文字列をファイル名に...
-
excel vba 時間計算と条件分岐...
-
実行シェルからCOBOLへパラメー...
-
long型に値を代入したい。
-
【Excel VBA】繰り返し処理がで...
-
Stringクラスの変数の格納アド...
-
PSQLExceptionが発生する
-
ResultSetの内部構造(Java)
-
String str = "a\\\\b\\\\c";
おすすめ情報