비트 연산에 새로운 것이므로 제 질문에 불만을 갖거나 stackoverflow에 적합하지 않은 경우 사전에 사과드립니다. 최근에 나는 바이너리 사이의 &
심볼을 사용하여 표현식의 결과를 출력하기 만하면 bitwise AND 연산을 수행하고 있습니다. 일부 표현식에서는 바이너리와 소수 사이의 비트 AND를 사용합니다. 예를 들어, 나는 110 & 4
내가 C에 인쇄뿐만 아니라 비트 연산 계산기에 값을 입력 한 후이 결과를 얻을 110 & 100
에와비트 연산이 부정확 한 결과를 나타냅니다.
1 1 0
1 0 0
-------
1 0 0
동일시하기 때문에 110 & 4
는 4
동일 것을 알고있다. 그러나 나는 경우 0 밖으로 main
인쇄의 첫 번째 줄 내 이해 010
및 10
가 (동일한 바이너리 저를 수정하시기 바랍니다 때문에 왜
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("%X\n", 010 & 2); //prints out 0?!?!?
printf("%X\n", 10 & 2); //prints out 2
printf("%X\n", 011 & 010); //prints out 8?!?!?
return 0;
}
잘 모르겠어요,이 같은 특정 방정식이 발생하면 혼란스러워 'm wrong)이고 010 & 010
은 010
과 같아야합니다. 이는 2
과 같습니다. 마지막으로 마지막 출력이 완전히
0 1 1
0 1 0
-------
0 1 0
그러나, 실제 출력이 8
마지막으로, 나는이었다 인쇄하기를 기대했던 있기 때문에 경비 날을 던졌습니다, 어떻게 이러한 비트 연산에 대한 하나 개의 빠른 질문이 있습니다 부울로 바뀌십시오. 예를 들어, 나는 경우 코더의 조건으로 이러한 식을 사용하는 결과가 0이 아닌 같은
int byte;
scanf("%d",&byte);
if(byte & 2){
.....
}
로 문을 byte & 2
긴으로 true로 동일시 하는가 봤어요? 모든 조언을 부탁드립니다.
EDIT : 내가 지금 일하는 정수 상수 유형을 언급하는 것을 잊어 버린 이유는 무엇입니까? 제 의도는 8 진법이 아닌 2 진법을 사용하여이 혼란에 대해 사과드립니다.
EDIT2 : 콘솔에 0b010
을 입력하면 위의 if 문이 작동하지 않는 것 같습니다. 그러나 0b010 & 2
은 2와 같으므로 잠재적으로이 문제의 원인이 될 수 있습니까? C에서
int byte;
scanf("%d",&byte);
if(byte & 2){
//doesn't work when I input 0b010
}
if(0b010 & 2){
//statement gets executed here but not the above, why?
}
'110' dec은'0b1101110'입니다. 그리고 정수 상수가 C로 어떻게 쓰여지는지 읽어보십시오. 그것은 중간에 수용 가능한 C 책으로 보여집니다. 표시기없이 숫자 체계를 혼합하지 마십시오. 질문이 명확하지 않습니다. – Olaf
어떤 기지에서 일하려고합니까? 당신의 왼쪽 피연산자가 바이너리이고 오른쪽이 십진수 인 것처럼 보입니까? – amit
C (및 다른 언어)에서 '0'으로 숫자를 시작할 때 이진수가 아닌 ** 옥타브 **를 의미합니다. – Barmar