I read about bitwise operators today and they seem rather handy to me. I also noticed Apple uses them too, for example with UIViewAutoresizing
.
In my app I need to keep track of the seven days of the week. Each day can be either enabled or disabled. I used to have seven BOOL
's, but now I'm trying to use a single integer for this:
enum {
DaysMonday = 1 << 0,
DaysTuesday = 1 << 1,
DaysWednesday = 1 << 2,
DaysThursday = 1 << 3,
DaysFriday = 1 << 4,
DaysSaturday = 1 << 5,
DaysSunday = 1 << 6
};
typedef NSUInteger Days;
My question is, how can I enable/disable those values now? I know I can check a variable days
for a specific day like this:
if (days & DaysThursday) {
// thursday enabled
}
But how do I..
Thank you.
Yes, Bitwise operations are alot faster than any arithmetic operations because these operations are performed directly on the bits that is 0 and 1. In this operation we will get the output Odd.
Bitwise Operators are used for manipulating data at the bit level, also called bit level programming. Bitwise operates on one or more bit patterns or binary numerals at the level of their individual bits. They are used in numerical computations to make the calculation process faster.
AND, OR, XOR, NOT, SHIFT, and MASK are the 6 bitwise operators. Each bit in the number is regarded as a 0 or 1 by the operators, which work with the binary representation of numbers.
Bitwise Operators in C/C++ The & (bitwise AND) in C or C++ takes two numbers as operands and does AND on every bit of two numbers. The result of AND is 1 only if both bits are 1. The | (bitwise OR) in C or C++ takes two numbers as operands and does OR on every bit of two numbers.
I'm not too familiar with objective-c, but here are the basics when dealing with bitwise operators.
Enable Thursday
days = days | DaysThursday;
Disable Thursday
allDays = DaysMonday | DaysTuesday | ... | DaysSunday;
days = days & (allDays ^ DaysThursday);
// OR
days = days & ~DaysThursday;
Toggle Thursday
days = days ^ DaysThursday;
Enable All
allDays = DaysMonday | DaysTuesday | ... | DaysSunday;
days = days | allDays;
// OR
days = allDays;
Disable All
days = days ^ days;
// OR
days = 0;
days = DaysMonday | DaysWednesday | DaysFriday | DaysSaturday;
days = days | DaysThursday;
days = days & ~DaysSaturday;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With