모 대학 2학년 컴퓨터공학부 재학중인 학부생입니다.
다름이 아니라 이번에 전공책 과제를 하던 중 도저히 제 상식으로 풀 수 없는 문제를 마주하여서 찾고 찾다 결국 제야의 고수들이 서식하시는 2cpu에서 여쭤봅니다.
순수하게 문제에 쏟은 시간만 5시간이 넘는데, 도무지 길이 안보이네요.. 힌트라도 조금만 주시면 감사하겠습니다..ㅠㅠ
문제는 이러합니다.
2.61과 2.62 문제인데요, 얼핏 보면 '어라 너무 쉬운데?' 하실까봐 부연설명 드립니다. 이 문제는 비트, 논리와 산술연산에 대한 이해를 높이려고 출제된 문제입니다. 따라서 다음과 같은 제한사항이 존재합니다..ㅠㅠ
네. 보이시나요. 조건문, 루프, 함수호출 나눗셈 곱셈 등이 제한되어서 뭐 손도 못 대고있습니다... 그나마 삽질로 알아낸건 형 변환을 잘 써먹으면 될 것 같은데 그마저도.. 제 머리로는 끝마칠 수가 없네요.. 도움 부탁드립니다.
int get_msb(int x) {
/* Shift by w-8 */
int shift_val = (sizeof(int)-1)<<3;
/* Arithmetic shift */
int xright = x >> shift_val;
/* Zero all but LSB */
return xright & 0xFF;
}
Ʈ ̶ մϴ.
dz Ȯϰ Ʈ Ʈ ° ū ϴ°Դϴ.
Ʈ ̶ ѹ ˻غ..
Ģ ǥ °̸ ü ׳ ִ Դϴ..
c迭̶ if(a) a 0 ƴϸ TRUE ü ׳ Ʈ ϶ Դϴ..
int 0 ä° unsigned int b = 0̸ ǰ..
int 1 ä° b-1ϸ ǰ..
lsb msb ׳ 1̳ -1 ϰ ýۿ Ʈ 0 ũ Ȯϸ ɰ̴ϴ.,.
Ʈ Ѵٴ ü ذ ʽϴ.. Ʋ/ΰ.. װŸ Ȯؼ msb lsb ġ Ȯθ ϸ Ǵ° ϴ.
̳
and or xor not Ʈ鸸 ϴϱ... ٵ оµ ϶° ھ Ф ˼մϴ... Ǯ ֽø...
c function 帮ڽϴ
Ǯ ϸ ..
2.61
a , Dz -1̸, ֻ ȣƮ Ʈ 1̸ ϰ 1 ǰ Dz ֻ ȣƮ 0 ǰų ȣƮ 0̵Ǹ 0 Ǵ α ¥ Դϴ. ؼФ ϼ̳?
c d ζ ϴµ ָԾ. d ֻ ȣƮ Ʈ Ʈ. , 8 Ʈ մϴ.
c ݴ 8 Ʈ մϴ. ϴµ Ǽ ڳ...̤
2.62 Ʋ ȿ ؼ ΰͰ ذ Ȱ ֳ.. 2.61̶ ֽø ϰٽϴ
int carry, sum;
carry = (n1 & n2) << 1; // Find bits that are used for carry
sum = n1 ^ n2; // Add each bit, discard carry.
if (sum & carry) // If bits match, add current sum and carry.
return badd(sum, carry);
else
return sum ^ carry; // Return the sum.
}
int bsub(int n1, int n2){
// Add two's complement and return.
return badd(n1, badd(~n2, 1));
}
** ó
https://stackoverflow.com/questions/12538724/performing-arithmetic-operations-in-binary-using-only-bitwise-operators
2.61.A return !(x ^ -1);
2.61.B return !x;
2.61.C return !((x & 0xff) ^ 0xff);
2.61.D return !get_msb(x);
2.62 return get_msb(x >> 8);
÷ get_msg() ̿ؼ Լȣ⸸ ϸ ϴ.
Ͻø ظѰ ذǴ Ͻ ֽϴ~