Tokhi
5월 16, 2025, 1:11오전
1
안녕하세요. 총 다섯개의 센서가 1비트씩 총 5비트로 전송되고 있습니다. 제품이 인식되면 1 , 아니면 0 입니다.
문제는 시작점 센서에서 제품이 나올때도 있고 안나올때도 있고 컨베어에서 제품이 이동할 때마다 비트열만 보자면 좌측으로 시프트가 되는데 저는 총 다섯자리중 최 좌,우측의 비트가 0이냐 1이냐만 판별하는 되는데 비트 연산만 있지 0,1이냐를 판별하는 방법을 못 찾겠는데 방법이 있을까요??
제품생산 및 이동에 따른 비트열 이동 예시입니다.
예) 00001 → 00010 → 00101 → 01011 → 10110
최우측의 비트가 1이면 제품이 컨베어에 올라온거고 최좌측의 비트가 1이면 제품이 컨베어 끝에서 적재대기로 이상태에선 컨베어가 멈춰 제품이동이 안됩니다.
신현뚜벅
5월 16, 2025, 1:24오전
2
byte sensors = ??;
// 10000 은 0x10
if ((sensors & 0x10) > 0)
//적재대기 true
if ((sensors & 1) > 0)
//벨트에 올라옴
tkm
5월 16, 2025, 1:36오전
3
3개 방식 예시입니다.
// 입력 값
int num = 0b10101;
{ // 비트 연산 사용
bool start = 0 != (num & 0b00001);
bool end = 0 != (num & 0b10000);
Console.WriteLine($"시작 : {start} / 끝 : {end}");
}
{ // BitArray 사용 (비추천)
BitArray array = new BitArray(new int[] { num });
bool start = array[0];
bool end = array[4];
Console.WriteLine($"시작 : {start} / 끝 : {end}");
}
{ // BitVector32 사용
BitVector32 vector = new BitVector32(num);
bool start = vector[0];
bool end = vector[4];
Console.WriteLine($"시작 : {start} / 끝 : {end}");
}
2개의 좋아요
질문 자체로만 보자면, 어렵지 않은 요구사항입니다.
const int Start = 1 << 0;
const int Second = 1 << 1;
const int Third = 1 << 2;
const int Forth = 1 << 3;
const int End = 1 << 4;
bool ProductAtStart(int sensorValue) => (sensorValue & Start) == Start;
(질문에 빠뜨린 내용이 있는 지 다시 한번 확인해보시기 바랍니다.)
Tokhi
5월 19, 2025, 7:25오전
5
감사합니다~! 비트연산은 해본적이 없어서 ㅠㅠ 윗분 댓글 참조해서 해결했습니다.
Tokhi
5월 19, 2025, 7:26오전
6
감사합니다~! 윗분 댓글 참조해서 해결했습니다.
Tokhi
5월 19, 2025, 7:27오전
7
감사합니다~! 그냥 수로 계산한게 너무 간단합니다 ㅎ