Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

XOR을 사용하여 주어진 문자열에 대한 2의 칭찬?

<시간/>

이 섹션에서는 이진 문자열에서 XOR 연산을 사용하여 2의 보수를 찾는 방법을 볼 것입니다. 2의 보수는 실제로 1의 보수 + 1입니다. XOR 연산을 사용하여 1의 보수를 얻습니다.

LSb에서 문자열을 탐색하고 0을 찾습니다. 0이 나올 때까지 1을 모두 0으로 뒤집습니다. 그런 다음 찾은 0을 뒤집습니다.

우리는 LSb에서 횡단할 것입니다. 그런 다음 1이 될 때까지 모든 0을 무시합니다. 처음 1을 무시하고 XOR 연산을 사용하여 모든 비트를 토글합니다.

알고리즘

get2sComp(빈)

begin len :=이진 문자열의 길이 flag :=false for i :=len-1 아래로 0, bin[i]가 0이고 플래그가 설정되지 않은 경우 수행한 다음 다음 부분을 무시하고 다음으로 이동합니다. 다음 반복 else if 플래그가 설정되어 있으면 bin[i] :=bin[i] 뒤집기 end if flag :=true 플래그가 설정되지 않은 경우 완료되고 bin에 1을 붙이고 else return bin end ifend 

예시

#include 네임스페이스 std;string get2sComplement(string bin) { int n =bin.length(); 부울 플래그 =거짓; //플래그는 1이 표시되면 사용됩니다 for (int i =n - 1; i>=0; i--) { //마지막 비트에서 트래버스 if (bin[i] =='0' &&!flag) { 계속하다; } else { if (플래그) bin[i] =(bin[i] - '0') ^ 1 + '0'; //XOR을 사용하여 비트를 뒤집은 다음 ASCII 플래그로 변환 =true; } } if (!flag) //1이 없으면 1을 삽입하십시오. return "1" + bin; else return bin;}int main() { 문자열 str; cout <<"바이너리 문자열을 입력하세요:"; 신>> str; cout <<"2의 보수 " < 

출력

2진 문자열 입력:101101102의 10110110 보수는 01001010입니다.