여기 답 본 적이 : http://clc-wiki.net/wiki/K%26R2_solutions:Chapter_2:Exercise_6K & R 운동 2-6 "setbits는"
을하고 난 첫 번째 테스트했지만,이 부분에 :
x = 29638;
y = 999;
p = 10;
n = 8;
return (x & ((~0 << (p + 1)) | (~(~0 << (p + 1 - n)))))
종이의 그것에게 줄 저 6 만 프로그램에서이 부분에 28678 ...
을 반환 : 결과에
111001111000110
&000100000000111
가장 왼쪽에있는 결과를
비트의 출력과 피연산자 중 어느 비트가 0 인 경우 피연산자의 대응하는 비트가 1 인 경우 1이고, 세 비트는 1 개
x
처럼의 있지만 비트 연산자&
말한다이어야 해당 비트의 0으로 평가됩니다.
그래서 왜 3의 비트가 1로 반환됩니까?
내가 이것을 실행할 때,'&'연산자의 오른쪽은'0x0807' 대신에'0xf807'으로 평가됩니다. 나는 이것이 표식 확장의 결과라고 생각한다. –
기다려야한다. 부호 확장이 아니라는 것을 기다려야한다. 단지 '~ 0 << 11' ='0xf000'이고, 7과 OR-ing은 그 상위 비트 1을 제거하지 않는다. 'y'는 어떻게 됐어? –
링크에서보세요, 전체 프로그램이 있습니다, 그냥이 부분을 잘라 내기 원인은 어디에서 문제입니까 – cristch