다음과 같이 음수를 양수로 변환 할 수 있습니다.
int myInt = System.Math.Abs(-5);
양수를 음수로 만드는 동등한 방법이 있습니까?
다음과 같이 음수를 양수로 변환 할 수 있습니다.
int myInt = System.Math.Abs(-5);
양수를 음수로 만드는 동등한 방법이 있습니까?
답변:
어때요?
myInt = myInt * -1
myInt = - Myint?
myInt *= - 1?
myShort = (short) -myShort하면 부정이 발생할 때 short가 int가되기 때문에 캐스트가 필요합니다.
int myNegInt = System.Math.Abs(myNumber) * (-1);
int negInt = -System.Math.Abs(myInt)
myInt<0 ? myInt : -myInt;훨씬 낫다. -연산자가 적절한 -1 * Number와 오버로딩 기능의 약어로 제공되기 때문에 * (-1)을 속이지는 않습니다.
다른 것을 부정적으로 만드는 것과 같은 방법으로, 그 앞에 부정적인 부호를 넣으십시오.
var positive = 6;
var negative = -positive;
int myNegInt = System.Math.Abs(myNumber) * (-1);
응답 한 모든 사람에게 메모
- Math.Abs(myInteger)
또는
0 - Math.Abs(myInteger)
또는
Math.Abs(myInteger) * -1
음수를 음수로 유지하고 양수를 음수로 바꾸는 방법으로
이 접근법에는 하나의 결함이 있습니다. 모든 정수에서 작동하지는 않습니다. Int32유형 의 범위는 "-2 31 "~ "2 31-1 "입니다. "음수"가 하나 더 있음을 의미합니다. 따라서 Math.Abs(int.MinValue)던진다 OverflowException.
올바른 방법은 조건문을 사용하는 것입니다.
int neg = n < 0 ? n : -n;
이 접근 방식은 "모든"정수에 적용됩니다.
Abs할 수없는) 문제를 해결하고 있습니다 .이 경우 예외를 던지는 것이 좋습니다. 그러나이 특정 문제는 "유효한"결과가 있지만 경로 를 사용하면 예외가 발생 합니다. int.MinValueintint.MinValueAbs
n입니다 -32768다음 -n도 -32768! 또한 int neg = n < 0 ? n : -n;삼항 중 하나가 전혀 아무것도하지 않기 때문에 모든 경우에 작동 할 수는 없습니다.
더 재미있게 :
int myInt = Math.Min(hisInt, -hisInt);
int myInt = -(int)Math.Sqrt(Math.Pow(Math.Sin(1), 2) + Math.Pow(Math.Cos(-1), 2))
* Math.Abs(hisInt);
편집 : 이것은 양의 입력에 대해 잘못입니다 ...- x (2s-Complement value)의 나머지 비트가 + x의 값의 '반대'가 아니라는 것을 잊어 버렸습니다. 따라서 단순히 부호 비트를 변경하면 양수에는 작동하지 않습니다.
나는 이것을 목적으로 여기에 남겨 둘 것입니다 ...
또는 까다로운 방법 (제 생각에는) ...
int y = x | ~ int.MaxValue;
cause int.MaxValue is 0111 1111 1111 1111 1111 1111 1111 1111
그래서
~int.MaxValue is 1000 0000 0000 0000 0000 0000 0000 0000
따라서 int32 Or'ed를 사용하면 부호 비트에 1을 넣고 (음수) 다른 모든 비트를 동일하게 유지합니다 ...
편집 : 실제로 1000 0000 0000 0000 0000 0000 0000 0000은 실제로 최소값이므로 다음과 같이 작동합니다.
int y = x | int.MinValue; // or, to do it to itself,
x |= int.MinValue;
-number. 1모두 0과 1입니다. 그것을 또는 - 보내고 int.MinValue같지 않은 10000000000000000000000000000001됩니다 -1(모든 사람을.)
재미로:
int negativeInt = int.Parse(String.Format("{0}{1}",
"-", positiveInt.ToString()));
업데이트 :이 접근법의 장점은 예외 생성기로 쉽게 리팩터링 할 수 있다는 것입니다.
int negativeInt = int.Parse(String.Format("{0}{1}",
"thisisthedumbestquestioninstackoverflowhistory", positiveInt.ToString()));
나는 사용한다 myInt = -myInt;
간단하고 쉬운
긍정적 인 것만 갖고 싶다면
myInt = myInt>0 ? myInt : -myInt;
int.MaxValueis 이후로 오버플로 가 발생 2147483647하고 var i = int.MaxValue; i++;작동하지 않습니다.
long negativeNumber = (long)positiveInt - (long)(int.MaxValue + 1);
아무도 그것이 특정한 음수 여야한다고 말하지 않았습니다 .
어쩌면?
int n;
.... some coding....
n = n<=0? n:0-n;
앞에서 언급했듯이 -1을 곱하는 것만으로는 시원하지 않습니다. int.MinValue * -1 == int.MinValue
그것은 실제로 응용 프로그램에 달려 있지만, 내 (조이스틱 축 반전)의 경우 모든 극단에 여전히 도달하고 최대한 충실하게 유지하려고합니다.
이를 위해 Max <-> Min을 매핑하고 그 사이의 모든 * -1
것이이 기술을 사용하므로 반전시 -32767에 도달 할 수 없습니다.
private static int Invert(int value)
{
if (value == int.MaxValue) return int.MinValue;
if (value == int.MinValue) return int.MaxValue;
return value * -1;
}
5아니다 -5,하지만 1/5.
이진수를 사용하고 음수 부호를 담당하는 마지막 비트를 제거하십시오.
또는 바이너리를 사용하거나 데이터 유형에 부호를 추가하십시오.
이 솔른은 터무니없고 불완전하게 들릴지 모르지만 이것이 가장 빠른 방법임을 보장 할 수 있습니다.
내가 게시 한 내용을 실험하지 않으면이 게시물이 쓸모없는 것처럼 보일 수 있습니다 : D
예를 들어 int :
Int는 32 비트 데이터 유형이므로 마지막 비트 (32 번째)는 부호를 결정합니다.
그리고 32 자리에서 0을 유지하고 1을 쉬십시오. 음수를 + ve로 변환합니다.
32 번째 자리에서 1의 값을 가진 반대 또는 0의 경우 휴식하십시오.
X=*-1모든 컴파일러에서 작동하지 않을 수 있습니다 ... NEGATIVE 대신 'multiply' 'SUBTRACT'1을 읽으므로 더 나은 대안은 X=(0-X)[WHICH IS DIFF FROM X-=X]입니다.