문제

아주 기본적인 질문이 있습니다.다음 코드의 경우:

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의 보수 또는 부호 있는 크기 표현을 사용하는지 여부에 관계없이 유지됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top