-2 를 hex 로 찍어보면??
글쓴이: 하하 / 작성시간: 수, 2005/05/18 - 3:50오후
main() { int x = -2; char *y = &x; printf("[%x %x %x %x]", y[0],y[1],y[2],y[3]); } [fffffffe ffffffff ffffffff ffffffff]
이렇게 출력이 됩니다.
컴퓨터는 -2를 2의 보수로 표현한다고 알고 있습니다.
1. -2의 실제 바이너리를 찍어보고 싶어 16진수 %x를 통해 찍어본결과 제가 예상하는 결과가 안나왔습니다.
2. print 서식중에 바이너리를 찍어볼수있는 방법이 있나요?
3. 할려는 것
-2 를 int 형에 넣고 실제로 char[100] 중 특정위치에 3바이트
내지 2바이트에 -2란 값을 넣고 싶습니다. 헌데 비트가 어떻게
이루워져 있는지 이해해야 값을 넣을수있을거 같습니다.
도움주세요..
Forums:
1. 출력결과는 정상으로 보이는군요.그리고, 출력 결과로 봐서는 테스
1. 출력결과는 정상으로 보이는군요.
그리고, 출력 결과로 봐서는 테스트 코드를 돌린 시스템은
Little-Endian 방식을 사용하는 CPU 겠군요...
'f' 문자가 많이 나와서 예상과 틀리다고 이야기 하시는거 같은데...
glibc 를 사용하는 경우라면 %x 대신 %hhx 로 출력해 보시면 될듯 싶네요
2. 제가 알기로는 없습니다. 일일이 비트 연산해서 찍어야 합니다.
3. memcpy() 를 사용하시는게 좋을듯 싶네요.
3. memcpy() 를 사용하시는게 좋을듯 싶네요.음수일 경우
3. memcpy() 를 사용하시는게 좋을듯 싶네요.
음수일 경우 -2 의 정수형 데이터를 그냥 3바이트 만큼 복사하면
이상한 결과가 나오지 않나요?
%hhx 로 찍어봤습니다.[fe ff ff ff] <ㅡ 이런
%hhx 로 찍어봤습니다.
[fe ff ff ff] <ㅡ 이런 결과가 나왔습니다.
-2 를 1의 보수로 표현하면
4바이트 기준으로 볼때(리틀 엔디언)
1111 1101 1111 1111 1111 1111 1111 1111
-2를 2의 보수로 표현하면
1111 1110 1111 1111 1111 1111 1111 1111
이렇게 됩니다.
이게 어떻게 [fe ff ff ff] 이런 결과로 나올수 있죠???
fe ff ff ff 는
10000 1111 10000 10000 10000 10000 10000 10000
이렇게 되니.. 틀리지 않나요? ㅡㅜ
Re: 아..이런 -.-;;
3번 항목을 잘못 이해했었군요 -.-;;
2바이트 내지 3바이트라면,
int 형 변수에 값을 넣고 해당 변수를 Little-Endian 으로 변경한 다음에
상위 2바이트 내지 3 바이트를 다시 시스템에서 사용하는 Endian 포맷에
맞춰서 넣어주는 방식이 나을듯 싶습니다.
16진수 0xF 는 2진수 1111 입니다만...? ;;;
16진수 0xF 는 2진수 1111 입니다만...? ;;;
[code:1]20000 0000 0000 0000 0000
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
[quote]Little-Endian[/quote]이거 뭔지 그냥지나
이거 뭔지 그냥지나 쳤는데, 오늘 절실히 느꼈습니다. ㅠㅠ
이런식이더군요. 역시 기초가 중요해 ㅠㅠ
-------------------- 절취선 --
행복하세요:)
Re: -2 를 hex 로 찍어보면??
얼마전에 짜봤던 코드 입니다.
자료형을 unsigned int 형으로 해야 한다는데 아직도 그 이유를 명확히 모르겠습니다.
종종 자신을 돌아보아요!~
하루 1% 릴리즈~~
Re: -2 를 hex 로 찍어보면??
이렇게 확인하시는건 어떨까요?
[quote="Anonymous"]fe ff ff ff 는1000
0xf = 1111
0xe = 1110
0xfe = 1111 1110
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
1바이트 데이터형이 4바이트로 찍히는것은printf함수에는 defau
1바이트 데이터형이 4바이트로 찍히는것은
printf함수에는 default argument promotion(기본인자진급)이 적용되기 때문입니다.
댓글 달기