C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 1L << 30 とはどういった意味をもつのでしょうか


(過去ログ 177 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■101554 / inTopicNo.1)  1L << 30 とはどういった意味をもつのでしょうか
  
□投稿者/ こいち (29回)-(2023/03/14(Tue) 23:14:34)

分類:[.NET 全般] 

VisualBasic2019 で開発をしております。

他の人の書いたコードでよく分からないところがありまして・・・
以下のIF文の「 1L << 30 」ってどういうことを指しているのか
ご存じの方はおられますでしょうか。

                If (accessLongNo And (1L << 30)) = 0 Then
                    MsgBox("アクセス権限がありません", MsgBoxStyle.Exclamation)
                    Return
                End If

※accessLongNo は Long型の変数です。

お詳しい方がおられたら教えていただけると幸いでございます。

引用返信 編集キー/
■101555 / inTopicNo.2)  Re[1]: 1L << 30 とはどういった意味をもつのでしょうか
□投稿者/ 魔界の仮面弁士 (3588回)-(2023/03/15(Wed) 01:26:39)
2023/03/15(Wed) 01:34:17 編集(投稿者)

No101554 (こいち さん) に返信
> 以下のIF文の「 1L << 30 」ってどういうことを指しているのか

「1L」は、「Long 型の 1」を表す数値リテラルです。
「1UL」ならば「ULong 型の 1」を表します。

「x << y」は、x の値を 左に y bit シフトするという意味です。
https://smdn.jp/programming/dotnet-samplecodes/bitwise_operations/14afd0be0fb111eb8931d93b9158057a/

結果的に「1L << y」は、CLng(2 ^ y) 相当の値になります。

Dim a0 = 1L << 0 '1
Dim a1 = 1L << 1 '2
Dim a2 = 1L << 2 '4
Dim a3 = 1L << 3 '8
Dim a30 = 1L << 30 '1073741824


> If (accessLongNo And (1L << 30)) = 0 Then
この場合の And はビットマスクの意味になります。

accessLongNo を 2 進数表現した場合に、
指定した位置のビットが on(1) なのか off(0) なのかを
確認するコードですね。
引用返信 編集キー/
■101557 / inTopicNo.3)  Re[2]: 1L << 30 とはどういった意味をもつのでしょうか
□投稿者/ こいち (30回)-(2023/03/15(Wed) 10:04:52)
>魔界の仮面弁士 さん

> 指定した位置のビットが on(1) なのか off(0) なのかを
> 確認するコードですね。

2進数に変換するというのが肝なのですね。
accessLongNo には設定画面上に沢山あるチェックボックスのオンオフによって登録時に
生成される値のようで、指定位置のチェックボックスがオンになっているか、という機能
ということが理解出来ました。

丁寧なご説明ありがとうございました。
大変参考になりました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -