2012-02-06 2 views
1

이전 질문에서 계속하고 있습니다. 사용자가 7 비트 이진수를 입력하고 컴퓨터가 숫자 오른쪽에있는 짝수 패리티 비트가있는 번호를 인쇄하는 C# 프로그램을 만들고 있습니다. 나는 고군분투하고있다. 코드가 있지만 BitArray는 네임 스페이스이지만 형식으로 사용됩니다. 또한 코드를 개선하고 더 간단하게 만들 수있는 방법이 있습니까? 이해하기 코드를 어렵게 아무것도 경우, 많은 당신을 구입하지 않는 BitArray를 사용7 비트 이진수에 짝수 패리티 비트를 추가하는 방법

namespace BitArray 
{ 
    class Program 
    {  
     static void Main(string[] args)  
     { 
      Console.WriteLine("Please enter a 7-bit binary number:"); 
      int a = Convert.ToInt32(Console.ReadLine()); 
      byte[] numberAsByte = new byte[] { (byte)a }; 
      BitArray bits = new BitArray(numberAsByte); 
      int count = 0; 

      for (int i = 0; i < 8; i++) 
      { 
       if (bits[i]) 
       { 
        count++; 
       } 
      } 

      if (count % 2 == 1) 
      { 
       bits[7] = true; 
      } 

      bits.CopyTo(numberAsByte, 0); 
      a = numberAsByte[0]; 
      Console.WriteLine("The binary number with a parity bit is:"); 
      Console.WriteLine(a); 
+2

코드를 포맷하십시오. 간단하게 만들기 위해 조회 테이블을 만들 수 있습니다. –

+1

오류 메시지를 읽습니다. 선택한 네임 스페이스 이름을보십시오. "BitArray"가 아닌 이름을 선택하십시오. –

답변

0

. 문제는 &|<< 연산자를 사용하여 기본 비트 조작으로 해결할 수 있습니다.

int bitsSet = 0; 
for(int i=0;i<7;i++) 
    if ((number & (1 << i)) > 0) 
     bitsSet++; 

지금 유일한 것은 bitsSet 여부를 결정한다 남아 : 특정 비트가 당신이 리드 2의 대응 능력으로 수를 & 수있는 번호에 설정되어있는 경우 예를 밖으로 찾을 수

짝수 또는 홀수이고 필요한 경우 남은 비트를 설정합니다.

+0

BitArray bits = new BitArray (numberasByte)는 네임 스페이스이지만 형식으로 사용되며 ((number & (1 << i)) > 0))와 같이해야한다고 말했듯이 새 BitArray (numberasByte)는 어떻게해야합니까? 현재 컨텍스트에서 코드를 보여 주시겠습니까? –

+0

@AsharAslam : 숫자를 int로 정의해야합니다. 예를 들어'int number = Convert.ToInt32 (Console.ReadLine()); '을 사용할 수 있습니다. BitArray 코드가 모두 필요합니다. – BrokenGlass

+0

현재 비트가 현재 컨텍스트 @Broken Glass에 정의되어 있지 않습니다.이 답변에 투표했습니다. –

2

는이 작업을 수행하는 데 사용하는 회로를 복제 할 더 재미있을 수 있습니다 .. 그리고

bool odd = false; 

for(int i=6;i>=0;i--) 
    odd ^= (number & (1 << i)) > 0; 

당신이 이상한하지 않도록 홀수, 홀수 패리티 짝수 패리티 설정 비트 7을 원하는 경우.

또는

bool even = true; 

for(int i=6;i>=0;i--) 
    even ^= (number & (1 << i)) > 0; 

회로는 이중 기능뿐만 아니라 2 개 이상의 비트 시간에, 0, 1, 1, 0을 반환하지이지만, 이것은 TPL ....

대한 비트 빛

추신 : <에 대한 입력을 확인하시는 것이 좋습니다. 그렇지 않으면 128 가지가 잘못 될 수 있습니다.

숙제 태그를 알아 채지 못 했으므로 설명하지 않으면 사용하지 마십시오.

+0

부울 (true/false) 때문에 bool을 이해합니다. 나는 나머지를 얻지 만 유일한 문제는 분명히 비트가 현재 상황에 존재하지 않는다는 것이다. 문자열, 부울, int 등입니까? –

+0

비트에 대한 유일한 참조는 코드에 있으며, 나도 깨진 브로큰 글래스는 언급하지 않았습니다. 우리는 시프트 연산자와 인덱스를 사용했습니다. 필요없는 BitArray 클래스는 System.Collections 네임 스페이스에 있지만 BitArray라는 네임 스페이스에 코드를 넣으면 숨겨집니다. @ 한스가 말했어. 코드에서 네임 스페이스 BitArray를 네임 스페이스로 변경합니다. 사용중인 네임 스페이스에 이미 사용되지 않은 다른 모든 것입니다. Tip은 더 나은 네임 스페이스를 선택합니다. Ashar.Homework.Exercise1이 문제를 해결할 것입니다. –

0

거의 동일한 프로세스로 더 많은 수의 비트에서 훨씬 더 빠릅니다. 루프없이 목적으로 만 산술 연산자 (SHR & & XOR)를 사용하여 :

public static bool is_parity(int data) 
{ 
    //data ^= data >> 32; // if arg >= 64-bit (notice argument length) 
    //data ^= data >> 16; // if arg >= 32-bit 
    //data ^= data >> 8; // if arg >= 16-bit 
    data ^= data >> 4; 
    data ^= data >> 2; 
    data ^= data >> 1; 
    return (data & 1) !=0; 
} 

public static byte fix_parity(byte data) 
{ 
    if (is_parity(data)) return data; 
    return (byte)(data^128); 
} 
관련 문제