СпойлерПоказать
Код: Выделить всё
//Очистить бит reg &= (~(1<<(bit)))
// Установить бит reg |= (1<<(bit))
// инвертировать бит reg ^= (1<<(bit))
$bit = $bit ^= (1<<(1));
$bit = $bit ^= (1<<(4));//invert bit 4
say("BIN = ".decbin($bit)." DEC = ".$bit);
$bit = $bit ^= (1<<(1));//inverbit 1
say("BIN = ".decbin($bit)." DEC = ".$bit);
$bit = $bit &= (~(1<<(4))); // очистка бита 4
$bit |= (1<<(2)); //Set bit 2
say("BIN = ".decbin($bit)." DEC = ".$bit);
sleep(1);
if((($bit & (1<<(0))) == 0)){
say("BIN = ".decbin($bit)." DEC = ".$bit);
#mesaga = "сработало";
}
say($mesaga);
Алиса выдает последнюю пустую строку
СпойлерПоказать
09:07 Алиса:
09:07 Алиса: BIN = 100 DEC = 4
09:07 Алиса: BIN = 100 DEC = 4
09:07 Алиса: BIN = 10000 DEC = 16
09:07 Алиса: BIN = 10010 DEC = 18
СпойлерПоказать
Код: Выделить всё
/*
Макросы для работы с битами
http://chipenable.ru/index.php/programming-avr/item/4-uchebnyy-kurs-kak-rabotat-s-bitami-makroopredeleniya.html
Примеры использования:
SetBit(PORTD,0); Установить нулевой бит порта D
ClearBit(PORTD,0); Сбросить нулевой бит порта D
InvBit(PORTD, 0); Инвертировать нулевой бит порта D
if (BitIsClear(PIND, 0)) { //если очищен нулевой бит в регистре PIND
….. //выполнить блок
}
if (BitIsSet(PIND, 0)) { //если Установлен нулевой бит в регистре PIND
….. //выполнить блок
}
*/
#ifndef BITS_MACROS_
#define BITS_MACROS_
/***********************************************************
//BITS MACROS
//PASHGAN 2009
//CHIPENABLE.RU
//
//reg : имя переменной, регистра
//bit : позиция бита
//val : 0 или 1
************************************************************/
#define Bit(bit) (1<<(bit))
#define Lo_Byte(x) (x&0xFF)
#define Hi_Byte(x) ((x>>8)&0xFF)
#define union_byte_macro(h,l) (h<<8|l)
#define ClearBit(reg, bit) reg &= (~(1<<(bit)))
//пример: ClearBit(PORTB, 1); //сбросить 1-й бит PORTB
#define SetBit(reg, bit) reg |= (1<<(bit))
//пример: SetBit(PORTB, 3); //установить 3-й бит PORTB
#define SetBitVal(reg, bit, val) do{if ((val&1)==0) reg &= (~(1<<(bit)));\
else reg |= (1<<(bit));}while(0)
//пример: SetBitVal(PORTB, 3, 1); //установить 3-й бит PORTB
// SetBitVal(PORTB, 2, 0); //сбросить 2-й бит PORTB
#define BitIsClear(reg, bit) ((reg & (1<<(bit))) == 0)
//пример: if (BitIsClear(PORTB,1)) {...} //если бит очищен
#define BitIsSet(reg, bit) ((reg & (1<<(bit))) != 0)
//пример: if(BitIsSet(PORTB,2)) {...} //если бит установлен
#define InvBit(reg, bit) reg ^= (1<<(bit))
//пример: InvBit(PORTB, 1); //инвертировать 1-й бит PORTB
#endif//BITS_MACROS_