gpt4 book ai didi

iphone - 这些位掩码实际上是如何工作的?

转载 作者:太空狗 更新时间:2023-10-30 03:10:32 27 4
gpt4 key购买 nike

例如,NSCalendar 中的这个方法需要一个位掩码:

- (NSDate *)dateByAddingComponents:(NSDateComponents *)comps toDate:(NSDate *)date options:(NSUInteger)opts

所以选项可以是这样的:

NSUInteger options = kCFCalendarUnitYear;

或喜欢:

NSUInteger options = kCFCalendarUnitYear | kCFCalendarUnitMonth | kCFCalendarUnitDay;

我不明白的是,这实际上是如何完成的?我的意思是:他们如何提取那些合并到 options 中的值?如果我想编写这样的程序,可以使用位掩码,那看起来会怎样?

最佳答案

位掩码真的很基础。您可以这样想(C#,直到有人可以转换):

public enum CalendarUnits
{
kCFCalendarUnitDay = 1, // 001 in binary
kCFCalendarUnitMonth = 2, // 010 in binary
kCFCalendarUnitYear = 4, // 100 in binary
}

然后您可以使用按位运算符来组合这些值:

// The following code will do the following
// 001 or 100 = 101
// So the value of options should be 5
NSUInteger options = kCFCalendarUnitDay | kCFCalendarUnitYear;

此技术也经常用于安全例程:

public enum Priveledges
{
User = 1,
SuperUser = 2,
Admin = 4
}

// SuperUsers and Admins can Modify
// So this is set to 6 (110 binary)
public int modifySecurityLevel = SuperUser | Admin;

然后检查安全级别,可以使用bitwise and 看你是否有足够的权限:

public int userLevel = 1;
public int adminLevel = 4;

// 001 and 110 = 000 so this user doesn't have security
if(modifySecurityLevel & userLevel == userLevel)

// but 100 and 110 = 100 so this user does
if(modifySecurityLevel & adminLevel == adminLevel)
// Allow the action

关于iphone - 这些位掩码实际上是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2555101/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com