|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|


3198, 1/160 |
![]() |
![]() |
![]() |
![]() |
|
영원한공부 | ||||||
|
[C언어] unsigned int a= -1; 이거 잘만 되네요. | ||||||
|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=2951 [복사]
Hit : 6043 Date : 2011/04/14 10:24
|
|||||||
| ![]() |
| |
| /x7375696e6567 | 예로 float i = 3.141592; printf("%d",i); 라고하면 3만 출력되는것과 비슷합니다 + unsigned int 형의 포맷스트링은 %u 입니다 |
2011/04/14 | |
| clockmaker | 출력은 아마 %d로 하셔서 -1이 나온 것 같고요. 윗분 말씀대로 해서 printf("%u \n", a); 를 쓰신다면 아마 4294967295 이 나올 겁니다. 이 값은 unsigned int의 MAX값에서 -1 한 값이죠 ㅇ_ㅇ |
2011/04/15 | |
| Prox | uint 4294967295와 int -1 둘다, 저장될때 메모리에 들어가는 값은 0xFFFFFFFF 이구요.. 이걸 윗분들말대로 %u로 출력하면 42억이, %d로 출력하면 -1이 나오게됩니다~ 근데 아마 unsigned에 -1의 값을 넣을때 warning이 있을거같은데.. 아닌가요? /x7375696e6567 // int형과 float형은 저장방식이 달라서 3이 안나와요 ㅎ http://en.wikipedia.org/wiki/Single_precision 여기에서 볼수있는 복잡한(?) 공식에 의해 3.14가 저장되고.. 그 2진수 값을 %d로 출력하면 아마 무지 큰 값이 나올겁니다 |
2011/04/15 | |
| clockmaker | Prox/ 해 봤는데요 gcc와 VS2010 모두 warning 나오지 않네요. 경고 정도는 띄워줘도 괜찮을 텐데 깔끔하게 컴파일 해 주는군요 ㄷㄷㄷ | 2011/04/15 | |
| 영원한공부 | 아 정말 고맙습니다. 댓글 다 읽어보고 갑자기 확 이해됬어요. 감사합니다. unsigned int a = -1; 을 하면 상수 1이 2의보수화 된 후에 a에 들어가니까 a = 11111111111111111111111111111111(2) 가 되서 %d = -1 , %u = 4294967295(unsigned int의 최댓값) 이 되는군요. %u를 잊고 있었어요 감사합니다 |
2011/04/15 | |
|
|