logo

C에서 2의 보수는 무엇입니까?

C의 2s 보수는 C의 1s 보수에서 생성됩니다. 우리가 알고 있듯이 이진수의 1s 보수는 비트 1을 0으로, 0을 1로 변환하여 생성됩니다. 이진수의 2의 보수는 이진수의 1의 보수에 1을 더하여 생성됩니다.

간단히 말해서, C의 2의 보수는 C의 1의 보수와 1의 보수의 합으로 정의된다고 말할 수 있습니다.

C의 2s 보수

위 그림에서 이진수는 00010100이고, 비트 1을 0으로, 0을 1로 그 반대로 변환하여 1의 보수를 계산합니다. 따라서 1의 보수는 11101011이 됩니다. 1의 보수를 계산한 후 1의 보수에 1을 더하여 2의 보수를 계산하면 그 결과는 11101100이 됩니다.

2의 보수 프로그램을 만들어 봅시다.

 #include int main() { int n; // variable declaration printf('Enter the number of bits do you want to enter :'); scanf('%d',&n); char binary[n+1]; // binary array declaration; char onescomplement[n+1]; // onescomplement array declaration char twoscomplement[n+1]; // twoscomplement array declaration int carry=1; // variable initialization printf('
Enter the binary number : '); scanf('%s', binary); printf('%s', binary); printf('
The ones complement of the binary number is :&apos;); // Finding onescomplement in C for(int i=0;i<n;i++) { if(binary[i]="=&apos;0&apos;)" onescomplement[i]="1" ; else } onescomplement[n]="" printf('%s',onescomplement); printf('
the twos complement of a binary number is : '); finding twoscomplement in c for(int i="n-1;">=0; i--) { if(onescomplement[i] == &apos;1&apos; &amp;&amp; carry == 1) { twoscomplement[i] = &apos;0&apos;; } else if(onescomplement[i] == &apos;0&apos; &amp;&amp; carry == 1) { twoscomplement[i] = &apos;1&apos;; carry = 0; } else { twoscomplement[i] = onescomplement[i]; } } twoscomplement[n]=&apos;&apos;; printf(&apos;%s&apos;,twoscomplement); return 0; } </n;i++)>

산출

C의 2s 보수

위 프로그램을 분석하면,

  • 먼저 비트 수를 입력하고 ' N ' 변수.
  • 비트 수를 입력한 후 문자 배열을 선언합니다. 문자 바이너리[n+1], 이는 이진수를 보유합니다. ' N '는 이전 단계에서 입력한 비트 수입니다. 기본적으로 배열의 크기를 정의합니다.
  • 우리는 두 개의 배열을 더 선언합니다. 1의 보수[n+1] , 그리고 2개의 보수[n+1]. 그만큼 1의 보수[n+1] 배열은 이진수의 1의 보수를 보유하는 반면 2의 보수[n+1] 배열은 이진수의 2의 보수를 보유합니다.
  • 초기화 나르다 변수를 선택하고 이 변수에 1개의 값을 할당합니다.
  • 선언 후에 이진수를 입력합니다.
  • 이제 간단히 이진수의 1의 보수를 계산해 보겠습니다. 이를 위해 우리는 고리 이진 배열 전체를 반복하며, for(int i=0;i. for 루프에서는 비트가 1인지 0인지 조건을 확인합니다. 비트가 1이면 1의 보수[i]=0 또 다른 1개의 보완[i]=1 . 이러한 방식으로 이진수의 1의 보수가 생성됩니다.
  • 1의 보수를 계산한 후 이진수의 2의 보수를 생성합니다. 이를 위해 우리는 고리 마지막 요소부터 시작 요소까지 반복됩니다. for 루프에는 세 가지 조건이 있습니다.
    • onescomplement[i]의 비트가 1이고 carry의 값이 1이면 twocomplement[i]에 0을 넣습니다.
    • onescomplement[i]의 비트가 0이고 carry의 값이 1이면 twoscomplement[i]에 1을 넣고 carry에 0을 넣습니다.
    • 위의 두 조건이 거짓인 경우 onescomplement[i]는 twoscomplement[i]와 같습니다.

부호 있는 정수 C에서는 자주 다음을 사용하여 표현됩니다. 2의 보수 표기법 . 같은 것을 사용하여 이진 표현 두 가지를 모두 표현하는 메커니즘을 제공합니다. 긍정적인 그리고 음의 정수 . 그만큼 최상위 비트(MSB) 로 사용됩니다 서명 비트 안에 2의 보수 표현 , 어디 0 양의 정수 , 그리고 1 음수 .

다음으로 시작 음수 이진 형식의 절대값을 사용할 수 있습니다. 보수(비트 부정) 그 값을 얻으려면 2의 보수 의 표현 음의 정수 . 당신은 추가 1 ~로 결과 값 대표권을 획득하기 위해 2의 보수 .

그만큼 2의 보수 인코딩 C에서는 다음을 나타낼 수 있습니다. 부호 있는 정수 그리고 빠른 산술 연산을 수행할 수 있습니다. 2의 보수를 사용하는 것의 한 가지 이점은 다음을 수행할 수 있다는 것입니다. 덧셈 그리고 빼기 부호 없는 숫자와 동일한 이진 연산을 사용합니다.

그만큼 이진수 처럼 함께 추가됩니다. 부호 없는 정수 2의 보수를 더할 때. 해당 위치에서 반출 메인 크리티컬 비트 무시될 뿐입니다. 이러한 사실로 인해 취급 서명된 숫자 다르게 할 필요가 없으며 추가가 간단해집니다.

추가를 고려해보세요 -5 그리고 -삼 사용하여 8비트 2의 보수 예를 들어 다음과 같습니다.

에 대한 이진수 -5 ~이다 11111011.

에 대한 이진수 -삼 ~이다 11111101 .

추가 수행:

 11111011 (-5) + 11111101 (-3) ------------- 111110100 (-8) 

정답은 111110100 , 어느 2의 보수 동일하다 -8 .

덧셈과 마찬가지로 뺄셈도 다음을 처리하여 수행할 수 있습니다. 두 번째 피연산자 2의 보수는 마치 덧셈인 것처럼. 즉, 음수의 2의 보수를 첫 번째 피연산자에 추가하여 제거합니다.

예를 들어, -삼 에서 차감됩니다. -5 :

바이너리에서는 -5 로 표현된다 11111011 그리고 -(-삼) ~에 의해 00000011 (2의 보수 -삼 )

뺄셈 수행

 11111011 (-5) + 00000011 (+3) ------------- 11111110 (-8) 

결과는 11111110 , 2의 보수는 다음과 같습니다. -8 .

결론:

C에서는 2s 보수 는 에 1을 더하여 생성된 음수의 이진 표현입니다. 1초 보수 . 컴퓨터 시스템은 부호 있는 숫자를 표현하고 산술 연산을 효율적으로 수행하기 위해 이 아이디어를 자주 사용합니다.

얻으려면 2s 보수 이진 정수의 경우 먼저 다음을 결정해야 합니다. 1초 보수 비트를 뒤집어서 숫자를 알아냅니다. 그 후, 대표 2s 보수 에 의해 획득된다 하나 추가 ~로 1초 보수 . 그만큼 최상위 비트(MSB) 숫자가 다음과 같은지 여부를 표현하여 부호 비트로 작동합니다. 긍정적인 또는 부정적인 .

계산은 2s 보수 주어진 이진 정수에 대한 값은 첨부된 C 프로그램에 표시됩니다. 사용자에게 두 가지를 모두 입력하라는 메시지가 표시됩니다. 이진수 그리고 비트 수. 그 후, 프로그램은 1의 보수를 획득하기 위해 필요한 절차를 수행한 다음 2s 보수 . 그런 다음 결과가 표시됩니다.

컴퓨터 과학과 프로그래밍에서는 다음을 이해하는 것이 중요합니다. 2s 보수 표현을 사용하면 이진수로 표현된 음수 값을 효과적으로 처리할 수 있기 때문입니다. 그것은 만든다 덧셈, 뺄셈 , 그리고 논리 연산 둘 다 더 간단 긍정적인 그리고 음수 . 범위 표현 가능한 정수 에 대해 대칭이다 인해 2s 보수 표현하므로 다양한 수치 연산에 적합합니다.

프로그래머는 2의 보수 개념을 이해하고 적절하게 활용함으로써 산술 연산을 수행하고, 이진 데이터로 작업하고, C 및 기타 프로그래밍 언어에서 부호 있는 정수를 사용하여 알고리즘을 설계할 수 있습니다.