:: 게시판
:: 이전 게시판
|
- 모두가 건전하게 즐길 수 있는 유머글을 올려주세요.
- 유게에서는 정치/종교 관련 등 논란성 글 및 개인 비방은 금지되어 있습니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
21/11/30 00:50
unsigned long long int는 음수가 없는 정수형이고 16비트 컴퓨터에서는 0~65535까지 표현합니다 그리고 0에서 1을 줄이면 65535가 됩니다. (C계열 언어에서, 이를 언더플로우라고 부릅니다)
21/11/30 00:53
갯수의 타입이 unsigned long long 갯수라는 것은 음수 없이 0 ~ 2^64-1 까지의 값을 표현할 때 사용하는 방법인데요
남은 소원의 갯수를 줄여달라고 하면 다 빌었으니 0에서 -1로 가야 하는데 unsigned는 음의 숫자 표기가 없기 때문에 바로 2^64-1로 돌아가 버립니다. 2진법으로 표시하면 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111로 바뀌게 되는데 signed에서는 제일앞의 1은 음의 표시가 되는데 이걸 unsigned로 바꿨으니 말도 안되는 크기의 숫자 표현이 되는거죠 즉 소원의 갯수가 저걸로 거의 무한대나 다름없게 바뀌게 된 것입니다
21/11/30 10:06
이미 앞에 두개는 빌어두었기 때문에 다시 빌 필요도 없습니다
그리고 추가된 소원으로 소원이 한개 남으면 항상 남은 소원의 갯수를 한개 줄여달라는 소원을 빌어두면 이후 한개 남았는지 계산할 필요없이 자동으로 갱신됩니다 크크크
21/11/30 00:51
소원이 줄어드는 메커니즘이 wish 형의 리스트에서 pop 하는 개념이면 underflow 대신 인덱스 에러가 발생해서 그런 거 아닐까.. 싶네요
21/11/30 01:00
각 소원이 하나의 목적을 위한 시퀀스니까 하나로 퉁쳐버려서 결과적으로 소원이 1개 남을수 있는 걸 사전 차단한거 아닌가요 쓸모없는 소원 2개도 소진할겸..
21/11/30 01:05
첫번째, 두번째, 세번째 소원을 하나의 뭉치로 취급해서 소원 한개 줄이는 소원으로 취급하는걸 막는거죠.
안 그러면 첫번째, 두번째 소원을 만족하면서 소원 한개를 줄이는 소원을 빈거로 취급해서 소원 3개 중에서 소원 한개를 쓰고, 한개를 줄여서 남은 소원이 한개가 되버릴 수 있으니까요.
21/11/30 01:12
거기다 소원의 갯수를 줄여달라는 소원에 대해서 그러면 처음부터 소원의 갯수가 줄어있던걸로 쳐서 두번째 소원은 애초에 빌지 않았던거로 한다는 식의 소원 들어주기를 막으려는 의도도 있을거고요.
21/11/30 06:27
줄이는것도 연산상으로 줄이는거지, 결국 소원을 늘리는 행위니까 안된다고 봐야 할테지만 크크
ALU 입장에서는 결국 덧셈이 이루어지니까요.
21/11/30 19:27
위키에 의하면 unsigned integer 에 음수를 넣으려다 큰 수로 취급되는 건 integer overflow 혹은 integer wraparound 라고 불립니다. 위의 댓글들에서 언급한 언더플로우(underflow)는 주로 부동 소수형(floating point number)로 0에 수렴하는 값을 표현하려다 지수부의 숫자가 (-)로 너무 커져서 표현할 수 없는 상태를 뜻합니다. 즉 컴퓨터에서 허용하는 가장 작은 양보다 더 작은 양을 표현하려다 발생하는 오류이지, 위의 만화에서와 같은 오류는 아닙니다.
|