import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("整数を入力ã—ã¦ãã ã•ã„: ");
int userInput = scanner.nextInt();
// 最も左端ã®ãƒ“ットを0ã«è¨å®š
int result = clearMostSignificantBit(userInput);
System.out.println("最も左端ã®ãƒ“ットを0ã«è¨å®šã—ãŸçµæžœ: " + result);
}
// 最も左端ã®ãƒ“ットを0ã«è¨å®šã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
public static int clearMostSignificantBit(int number) {
int mask = 0x7FFFFFFF; // 最も左端ã®ãƒ“ットãŒ0ã§ã€ä»–ã®ãƒ“ットãŒ1
return number & mask;
}
}
ã“ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã§ã¯ã€clearMostSignificantBit メソッドを使用ã—ã¦ã€æœ€ã‚‚左端ã®ãƒ“ットを0ã«è¨å®šã—ã¾ã™ã€‚ユーザーã‹ã‚‰ã®æ•´æ•°å…¥åŠ›ã¨ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’使用ã—ã¦ã€æœ€ã‚‚左端ã®ãƒ“ットを0ã«è¨å®šã—㟠result を計算ã—ã€ãã®çµæžœã‚’表示ã—ã¾ã™ã€‚
æ•´æ•°ã®æœ€ã‚‚左端ã®ãƒ“ットを0ã«ã™ã‚‹
æ•´æ•°ã®æœ€ã‚‚左端(最上ä½ï¼‰ã®ãƒ“ットを0ã«è¨å®šã™ã‚‹ãŸã‚ã«ã€ãƒ“ット演算を使用ã§ãã¾ã™ã€‚最も左端ã®ãƒ“ットを0ã«è¨å®šã™ã‚‹ã“ã¨ã¯ã€ãã®ãƒ“ットをクリアã™ã‚‹æ“作ã¨ã—ã¦çŸ¥ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚以下ã¯ã€ã“ã®æ“作ã®è§£èª¬ã§ã™ã€‚
- æ•´æ•°ã‚’2進数表ç¾ã«å¤‰æ›ã—ã¾ã™ã€‚æ•´æ•°ã¯é€šå¸¸32ビット(int型)ã¾ãŸã¯64ビット(long型)ã§è¡¨ç¾ã•れã¦ãŠã‚Šã€2進数表ç¾ã¯0ã¨1ã®ãƒ“ットã®åˆ—ã§æ§‹æˆã•れã¾ã™ã€‚最も左端ã®ãƒ“ãƒƒãƒˆãŒæœ€ä¸Šä½ãƒ“ットã§ã™ã€‚
- 最も左端ã®ãƒ“ットを0ã«è¨å®šã—ãŸã„å ´åˆã€ãã®ãƒ“ットを0ã«ã™ã‚‹ãŸã‚ã®ãƒ“ットマスクを用æ„ã—ã¾ã™ã€‚ã“ã®ãƒ“ットマスクã¯ã€æœ€ã‚‚左端ã®ãƒ“ットãŒ0ã§ã€ä»–ã®ãƒ“ットãŒ1ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚例ãˆã°ã€32ビット整数ã®å ´åˆã€æœ€ã‚‚左端ã®ãƒ“ットを0ã«è¨å®šã™ã‚‹ãŸã‚ã®ãƒ“ットマスクã¯
0x7FFFFFFFã§ã™ã€‚ã“れã¯ã€2進数表ç¾ã§æœ€ã‚‚左端ã®ãƒ“ットãŒ0ã§ä»–ã®ãƒ“ットãŒ1ã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚ - æ•´æ•°ã¨ãƒ“ットマスクをビット論ç†ç©ï¼ˆAND演算)ã§çµåˆã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ“ットマスク内ã®1ã®ãƒ“ットã¯ãã®ã¾ã¾ä¿æŒã•ã‚Œã€æœ€ã‚‚左端ã®ãƒ“ットã¯0ã«ã‚¯ãƒªã‚¢ã•れã¾ã™ã€‚
- 最終的ãªçµæžœã¯ã€æœ€ã‚‚左端ã®ãƒ“ットãŒ0ã«è¨å®šã•ã‚ŒãŸæ•´æ•°ã§ã™ã€‚
以下ã¯Javaã§ã®ãƒ“ット演算を使用ã—ã¦æœ€ã‚‚左端ã®ãƒ“ットを0ã«ã‚¯ãƒªã‚¢ã™ã‚‹ä¾‹ã®ã‚³ãƒ¼ãƒ‰ã§ã™ï¼š
int number = 42; // 例ã¨ã—ã¦æ•´æ•°42を使用
int mask = 0x7FFFFFFF; // 最も左端ã®ãƒ“ットを0ã«è¨å®šã™ã‚‹ãƒ“ットマスク
int result = number & mask; // ビット論ç†ç©ã§æœ€ã‚‚左端ã®ãƒ“ットを0ã«ã‚¯ãƒªã‚¢
ã“ã®ã‚³ãƒ¼ãƒ‰ã¯ã€æ•´æ•°42ã®æœ€ã‚‚左端ã®ãƒ“ットを0ã«è¨å®šã—ã€result ã«ãã®çµæžœã‚’æ ¼ç´ã—ã¾ã™ã€‚ビット演算を使用ã™ã‚‹ã“ã¨ã§ã€æ•´æ•°ã®ãƒ“ットã®ç‰¹å®šã®ä½ç½®ã‚’æ“作ã§ãã¾ã™ã€‚
æ•´æ•°ã®ä»»æ„ã®ãƒ“ットを0ã«ã™ã‚‹
æ•´æ•°ã®ä»»æ„ã®ãƒ“ットを0ã«è¨å®šã™ã‚‹ã«ã¯ã€ãƒ“ット演算を使用ã—ã¾ã™ã€‚具体的ãªãƒ“ットä½ç½®ã‚’0ã«ã™ã‚‹ãŸã‚ã«ã€ãƒ“ットマスクを作æˆã—ã€ãƒ“ット演算をé©ç”¨ã—ã¾ã™ã€‚以下ã«ã€æ•´æ•°ã®ä»»æ„ã®ãƒ“ットを0ã«è¨å®šã™ã‚‹æ–¹æ³•ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚
- 特定ã®ãƒ“ットを0ã«è¨å®šã™ã‚‹æ–¹æ³•:
æ•´æ•° number ã®ç‰¹å®šã®ãƒ“ットä½ç½® bitPosition ã‚’0ã«è¨å®šã™ã‚‹å ´åˆã€ãƒ“ットマスクを作æˆã—ã€ãƒ“ット演算を使用ã—ã¾ã™ã€‚ビットマスクã¯ã€è©²å½“ã®ãƒ“ットä½ç½®ãŒ0ã§ã€ä»–ã®ãƒ“ットä½ç½®ãŒ1ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
int number = 42; // 例: 00101010 (2進数)
int bitPosition = 3; // 3番目ã®ãƒ“ットを0ã«è¨å®š
// ビットマスクã®ä½œæˆ
int mask = ~(1 << bitPosition); // 3番目ã®ãƒ“ットを0ã«è¨å®š
int result = number & mask; // 特定ã®ãƒ“ットを0ã«è¨å®š
上記ã®ã‚³ãƒ¼ãƒ‰ã§ã¯ã€bitPosition ãŒ3ã®å ´åˆã€3番目ã®ãƒ“ットãŒ0ã«è¨å®šã•れã€ä»–ã®ãƒ“ットã¯å¤‰æ›´ã•れã¾ã›ã‚“。
- 複数ã®ãƒ“ãƒƒãƒˆã‚’åŒæ™‚ã«0ã«è¨å®šã™ã‚‹æ–¹æ³•:
複数ã®ãƒ“ãƒƒãƒˆã‚’åŒæ™‚ã«0ã«è¨å®šã™ã‚‹å ´åˆã€ãƒ“ットマスクを作æˆã—ã€å„ビットä½ç½®ã®1ã¾ãŸã¯0ã®ãƒ‘ターンを指定ã—ã¾ã™ã€‚
int number = 255; // 例: 11111111 (2進数)
int mask = 0b11000000; // 0b プレフィックスを使用ã—ã¦2進数リテラルを指定
int result = number & mask; // ビットマスクをé©ç”¨ã—ã¦è¤‡æ•°ã®ãƒ“ットを0ã«è¨å®š
上記ã®ã‚³ãƒ¼ãƒ‰ã§ã¯ã€ãƒ“ットマスク mask ã«ã‚ˆã£ã¦ç‰¹å®šã®ãƒ“ットä½ç½®ãŒ0ã«è¨å®šã•れã€ä»–ã®ãƒ“ットã¯å¤‰æ›´ã•れã¾ã›ã‚“。
ビット演算を使用ã™ã‚‹ã“ã¨ã§ã€æ•´æ•°ã®ç‰¹å®šã®ãƒ“ットä½ç½®ã‚’0ã«è¨å®šã§ãã¾ã™ã€‚ビット演算ã¯ã€ãƒ“ãƒƒãƒˆãƒ¬ãƒ™ãƒ«ã®æ“作ã«å½¹ç«‹ã¤å¼·åŠ›ãªãƒ„ールã§ã™ã€‚
「003 演算åã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント