더 작은 범위를 표현하는 타입으로 캐스팅하는 것이라 정의하기 나름입니다만, 하위 8비트가 나타내는 값으로 변환한다고 정의하면 256으로 나눈 나머지가 그 값인 것은 당연하지 않나요? 10진수의 경우를 생각해보시면 이해가 쉬울 듯 합니다. 예를 들어 12325의 하위 두 자리 수는 12325 를 100으로 나눈 나머지 25입니다. 하위 세 자리 수는 1000으로 나눈 325지요. 수식을 써서 일반적으로 증명할 수도 있습니다만 이 예가 와닿지 않는다면 엄밀한 증명은 별 의미 없습니다. 12325를 잘 생각해보세요.
하위 1자리만 남기고 싶다면? 12345 % 10^1 = 5
하위 2자리만 남기고 싶다면? 12345 % 10^2 = 45
하위 3자리만 남기고 싶다면? 12345 % 10^3 = 345
...
이게 가능한 이유는 십진법에서 하위 N자리를 제외한 상위 자리의 수는 무조건 10^N으로 나누어 떨어지기 때문입니다. (상위 자리 중 가장 낮은 자리의 수가 a*10^N 이고 그 다음 자리의 수가 b*10^(N+1)이고 그 다음 자리는 c*10^(N+2) 이고...니까)
즉 상위 자리의 수를 제거하는 것은 10^N으로 나눈 나머지를 구하는 것과 동일합니다.
300을 이진수로 표현하면 0000 0001 0010 1100
하위 1비트만 남기고 싶다면? 0000 0001 0010 1100 % 2^1 = 0
하위 4비트만 남기고 싶다면? 0000 0001 0010 1100 % 2^4 = 1100 (십진수 12 = 300 % 16)
하위 8비트만 남기고 싶다면? 0000 0001 0010 1100 % 2^8 = 0010 1100 (십진수 44 = 300 % 256)
여기서도 마찬가지로 우측 8비트를 제외한 나머지 상위 비트는 전부 2^8로 나누어 떨어지니까, 상위 비트의 값을 제거하는 것과 2^8로 나눈 나머지를 구하는 것이 동일하죠.
아123
음
AND 연산을 해주는 것과 같습니다.
256을 hex로 표현하면 0x100이 되고 %256을 한다는 의미는
a = b & 0xff와 같습니다.
이해가 잘되지않습니다
...
더 작은 범위를 표현하는 타입으로 캐스팅하는 것이라
더 작은 범위를 표현하는 타입으로 캐스팅하는 것이라 정의하기 나름입니다만, 하위 8비트가 나타내는 값으로 변환한다고 정의하면 256으로 나눈 나머지가 그 값인 것은 당연하지 않나요? 10진수의 경우를 생각해보시면 이해가 쉬울 듯 합니다. 예를 들어 12325의 하위 두 자리 수는 12325 를 100으로 나눈 나머지 25입니다. 하위 세 자리 수는 1000으로 나눈 325지요. 수식을 써서 일반적으로 증명할 수도 있습니다만 이 예가 와닿지 않는다면 엄밀한 증명은 별 의미 없습니다. 12325를 잘 생각해보세요.
예를 들으신건 잔돈 또는 부분으러 나누는 예라는건 알겠는데요
2진수 비트를 가지고서 그냥 나눈 나머지가 앞에 비트를 잘라낸다는것은 이해가 가지않습니다..
전혀 다를 것이 없습니다. 완전히 같은 문제입니다.
전혀 다를 것이 없습니다. 완전히 같은 문제입니다. 10진수냐 2진수냐는 중요하지 않습니다. 10진수로는 이해되는 데 2진수로는 이해되지 않으시면다면 2진수가 뭔지 사실은 모르시는 겁니다. 2진수가 무엇인지 한 번 "말로 정확하게" 써보시고 곰곰히 생각해보세요.
음,,
2진수를 모른다고 생각하진않는데 비트를 제거하는것과 %르하는것이 무슨연관이 있는지는 도무지 모르겠네요..
십진수, 이진수의 문제가 아니라고 말씀하셨잖아요.
십진수, 이진수의 문제가 아니라고 말씀하셨잖아요.
256으로 나눈 나머지를 구하면 앞의 비트가 다 날라가고 나머지만 남게 되죠.
먼저 적극적으로 사고해 보시길.
상관이 없는건 저도 알고있어요
표기의 차이지 같은 걸 말하는건 저도 알고 있습니다 다르다고 말한적은 없구요 다만 비트를 없애는것이 왜 mod와 같은지 머릿속으로는 그럴거 같지만 확실히 알고싶어서 질문드린겁니다
이미 다른 분이 예를 들어주셨지만 다시 한 번...
이미 다른 분이 예를 들어주셨지만 다시 한 번...
십진수 12345 는 다섯 자리.
하위 1자리만 남기고 싶다면? 12345 % 10^1 = 5
하위 2자리만 남기고 싶다면? 12345 % 10^2 = 45
하위 3자리만 남기고 싶다면? 12345 % 10^3 = 345
...
이게 가능한 이유는 십진법에서 하위 N자리를 제외한 상위 자리의 수는 무조건 10^N으로 나누어 떨어지기 때문입니다. (상위 자리 중 가장 낮은 자리의 수가 a*10^N 이고 그 다음 자리의 수가 b*10^(N+1)이고 그 다음 자리는 c*10^(N+2) 이고...니까)
즉 상위 자리의 수를 제거하는 것은 10^N으로 나눈 나머지를 구하는 것과 동일합니다.
300을 이진수로 표현하면 0000 0001 0010 1100
하위 1비트만 남기고 싶다면? 0000 0001 0010 1100 % 2^1 = 0
하위 4비트만 남기고 싶다면? 0000 0001 0010 1100 % 2^4 = 1100 (십진수 12 = 300 % 16)
하위 8비트만 남기고 싶다면? 0000 0001 0010 1100 % 2^8 = 0010 1100 (십진수 44 = 300 % 256)
여기서도 마찬가지로 우측 8비트를 제외한 나머지 상위 비트는 전부 2^8로 나누어 떨어지니까, 상위 비트의 값을 제거하는 것과 2^8로 나눈 나머지를 구하는 것이 동일하죠.
좋은 하루 되세요!
아 나머지법칙에 의해 성립되는군요 감사합니디!!
머릿속으로는 될거깉은데 왜되는가를 설명하려니 이해가 안되더군요 감사합니다
댓글 달기