숫자 (예 : 9)를 32 정수 (00000000000000000000000000001001)로 변환 한 다음 모든 비트 (11111111111111111111111111110110)를 반전하는 방법을 알고 싶습니다. 문자열에서 숫자를 대체하여이를 수행하는 방법을 알고 있지만 이진 연산자를 사용하여 숫자를 처리하는 방법을 알아야합니다. 나는 이것을 "~"이라고 써야한다고 생각합니다.하지만 값에 사용할 때 음수가됩니다.C에서 이진 연산자를 사용하여 숫자의 32 비트를 모두 반전합니다.
답변
숫자의 10 진수 버전을 보면 음수입니다. 부호없는 정수로 선언하면 긍정적 인 값으로 선언됩니다. 그러나 진이 나던 문제는 항상 11111111111111111111111111110110. 이 시도 될 것입니다 :
int number = 9;
Console.WriteLine(Convert.ToString(number, 2)); //Gives you 1001
number = ~number; //Invert all bits
Console.WriteLine(Convert.ToString(number, 2));
//Gives you your wanted result: 11111111111111111111111111110110
올바른 기능을 수행하고 있습니다. C# 내의 int
데이터 형식은 부호있는 정수를 사용하므로 실제로 11111111111111111111111111110110은 음수입니다.
부호가없는 값을 사용하려면 마크 번호가 uint
으로 표시되어야합니다.
"C# signed integers"를 사용하는 것은 사실이 아닙니다. C#에서는 signed ('sbyte','short','int','long') 또는 unsigned ('byte','ushort','uint','ulong') 정수를 쉽게 사용할 수 있습니다. –
@MarcGravell 사실, 나는 int를 의미했다. – Peter
사용 부호없는 INT. –
'int' ***으로'11111111111111111111111111110110'은 *** 음수입니다. '~ val'은 정확합니다; 만약 당신이 서명하고 싶지 않다면,'uint'를 사용하십시오. –