문제
아주 기본적인 질문이 있습니다.다음 코드의 경우:
int i = -1;
unsigned int j = (unsigned int) i;
printf("%d",j); // I get 65535 the int limit in turbo C 16 bit compiler
단순히 음수 기호를 삭제하면 안 됩니까, 아니면 한계를 둘러싸야 합니까?
해결책
음수를 나타내는 데 가장 일반적으로 사용되는 방식은 2의 보수 .이 구성표에서 -1
는 모든 1
비트의 비트 패턴을 갖는다 : 1111 1111 1111 1111
.부호없는 정수로 해석 될 때, 캐스트가 의미하는 것입니다. 65535입니다.
다른 말로하면, 그렇게하는 것과는 다른 효과가있는 것보다 다른 효과가있는 것을 제외하고는 "부정적인 신호를 단순히 떨어 뜨리십시오.
다른 팁
변환할 때 int
에게 unsigned int
, 값이 음수이면 결과는 해당 음수 값이 다음보다 1 더 큰 숫자에 추가된 것과 같습니다. unsigned int
붙잡을 수있는.이는 C90 이후 C 표준에 의해 지정되며 기계가 2의 보수, 1의 보수 또는 부호 있는 크기 표현을 사용하는지 여부에 관계없이 유지됩니다.
제휴하지 않습니다 StackOverflow