2012-06-25 4 views
13

비트를 설정하고, 비트를 지우고, 비트를 토글하고, 비트가 설정되어 있는지 확인하는 방법을 알고 있습니다.C 비트 연산/한 바이트에서 다른 바이트로 한 비트 복사

하지만 어떻게하면 bit_1의 nr 7을 byte_2의 nr 7 비트로 복사 할 수 있습니까?

if 문 없이도 가능합니다 (비트 값을 확인하지 않고)?

#include <stdio.h> 
#include <stdint.h> 
int main(){ 
    int byte_1 = 0b00001111; 
    int byte_2 = 0b01010101; 

    byte_2 = // what's next ? 

    return 0; 
} 
+0

한 번에 수행하는 방법을 찾으십니까? 그렇지 않다면, 당신이 이미 알고있는 것을해라. 당신은 byte1의 비트를 검사하고, byte2의 비트를 검사하며, 동일하지 않다면 byte2의 비트를 설정한다. –

+0

하나의 연산에 있어서는 안된다. 가능하다면 비트 값을 먼저 검사하는 것을 피하기 바란다. – astropanic

+0

[조건없는 unsigned char의 다른 비트와 unsigned char의 비트 설정하기] (http : //stackoverflow.com/questions/11170740/setting-a-bit-of-an-unsigned-char-with-the-other-bit-of-another-unsigned-char) – Heisenbug

답변

23
byte_2 = (byte_2 & 0b01111111) | (byte_1 & 0b10000000); 
+5

여기에가는 주요 투표 변경 .... –

+1

geezzz ... 이것에 대한 투표 #가 1 초마다 깜박입니다. – Mysticial

+0

@EitanT 예 0 일 것입니다. – emesx

6
먼저 byte2or에 이전에 읽은 비트 비트를 취소 byte1에서 비트를 읽을 필요가

:

read_from = 3; // read bit 3 
write_to = 5; // write to bit 5 

the_bit = ((byte1 >> read_from) & 1) << write_to; 
byte2 &= ~(1 << write_to); 
byte2 |= the_bit; 

주를 그 다른 대답 식 (당신이 그것을 확장하는 경우 비트 7 대신에 변수 사용)은 read_fromwrite_to이 같은 값인 경우입니다.

+0

읽기 비트가 0이면이 이미 그 비트 위치에 1을 가지고있는 바이트에 그것을 쓰지 않을 것이다. –

+0

@ CoreyOgburn, 오른쪽. 나는 대답을 업데이트했다 – Shahbaz

관련 문제