#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
#import "Worker.h"
#import "Engineer.h"
struct bs {
unsigned a : 9;//如果超过位域范围(511),则只取范围内的值,其他位(高位)丢弃
unsigned b : 4;
unsigned c : 3;
}bit, *pbit;
void test1()
{
bit.a = 512;//超过位域范围报警告
bit.b = 10;
bit.c = 7;
NSLog(@"%d,%d,%d\n", bit.a, bit.b, bit.c);
pbit=&bit;
pbit-> a=0;
pbit-> b&=3;
pbit-> c|=1;
printf("%d,%d,%d\n ",pbit-> a,pbit-> b,pbit-> c);
}
void test2()
{
Person *per = [[Person alloc] init];
per.tall = NO;
per.rich = NO;
per.handsome = YES;
NSLog(@"%d %d %d", per.isTall, per.isRich, per.isHandsome);
}
void test3()
{
Student *stu = [[Student alloc] init];
stu.tall = YES;
stu.rich = NO;
stu.handsome = YES;
NSLog(@"%d %d %d", stu.isTall, stu.isRich, stu.isHandsome);
}
void test4()
{
Worker *worker = [[Worker alloc] init];
// worker.tall = YES;
worker.rich = NO;
worker.handsome = NO;
worker.thin = YES;
NSLog(@"%d %d %d", worker.isThin, worker.isRich, worker.isHandsome);
}
void test5()
{
Engineer *engineer = [[Engineer alloc] init];
// engineer.age = 12;
// engineer.level = 6;
// engineer.workers = 5;
//0b 1111 1111 1111 1111(十进制:65535)
//0b 0010 1100 1110 1101(十进制:11501)
engineer->_personalInfo.bits =11501;
NSLog(@"%d %d %d", engineer.getAge, engineer.getLevel, engineer.getWorkers);
//2019-10-08 16:42:09.612140+0800 SetAndGetsForMask[1488:127227] 7 16 8160
//
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
test1();
// test2();
// test3();
// test4();
// test5();
}
return 0;
}
2019-10-09 10:42:04.998750+0800 SetAndGetsForMask[2513:316066] 0 0 1
2019-10-09 10:42:04.999093+0800 SetAndGetsForMask[2513:316066] 1 0 1
2019-10-09 10:42:04.999122+0800 SetAndGetsForMask[2513:316066] 1 0 0
Program ended with exit code: 0
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
//位域位置(变量值存储位置)
#define AgeMask 0b00000111//最低三位存储
#define LevelMask (1<<4)//低位往高位数,第5位存储
#define WorkersMask 0b0001111111100000