小编Joh*_*udy的帖子

什么是按位移位(位移)运算符以及它们如何工作?

我一直在尝试在业余时间学习C语言,其他语言(C#,Java等)具有相同的概念(通常是相同的运算符)......

我想知道是,在核心层,是什么位移(<<,>>,>>>)这样做,可以帮助它什么问题解决,和周围的弯曲什么潜伏的陷阱?换句话说,一个绝对的初学者指导比特移位的所有优点.

bit-manipulation binary-operators operators bit-shift

1340
推荐指数
9
解决办法
67万
查看次数

NSInvocation for Dummies?

NSInvocation工作究竟如何?有一个很好的介绍吗?

我特别关注以下代码(来自Cocoa Programming for Mac OS X,3rd Edition)的工作原理,但是也可以独立于教程示例应用这些概念.代码:

- (void)insertObject:(Person *)p inEmployeesAtIndex:(int)index
{
    NSLog(@"adding %@ to %@", p, employees);
    // Add inverse of this operation to undo stack
    NSUndoManager *undo = [self undoManager];
    [[undo prepareWithInvocationTarget:self] removeObjectFromEmployeesAtIndex:index];
    if (![undo isUndoing])
        [undo setActionName:@"Insert Person"];

    // Finally, add person to the array
    [employees insertObject:p atIndex:index];
}

- (void)removeObjectFromEmployeesAtIndex:(int)index
{
    Person *p = [employees objectAtIndex:index];
    NSLog(@"removing %@ from %@", p, employees);
    // Add inverse of this operation to undo stack
    NSUndoManager …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c undo-redo

138
推荐指数
3
解决办法
6万
查看次数

##预处理器运算符和陷阱的应用有哪些应用?

正如我之前的许多问题所述,我正在通过K&R工作,目前正在进入预处理器.其中一个更有意思的事情 - 我之前从未尝试过的任何学习C的尝试 - 是##预处理器操作员.根据K&R的说法:

预处理器运算符## 提供了一种在宏扩展期间连接实际参数的方法.如果替换文本中##的参数与a相邻,则参数将替换为实际参数, ##并删除周围的空白区域,并重新扫描结果.例如,宏paste 连接其两个参数:

#define paste(front, back) front ## back

所以paste(name, 1)创建令牌 name1.

如何以及为什么有人会在现实世界中使用它?它的使用的实际例子是什么,有什么需要考虑的?

c kernighan-and-ritchie stringification c-preprocessor

86
推荐指数
4
解决办法
7万
查看次数

在Visual Studio中,"清理"命令有什么作用?

你知道,那个输出这个=>

------清理开始:项目:Foo.Bar,配置:调试任何CPU ------
==========清理:1成功,0失败,0跳过==== ======

什么是清洁?

build-process visual-studio

65
推荐指数
3
解决办法
4万
查看次数

int数组到字符串

在C#中,我有一个int数组,只包含数字.我想将此数组转换为字符串.

数组示例:

int[] arr = {0,1,2,3,0,1};
Run Code Online (Sandbox Code Playgroud)

如何将其转换为格式为的字符串:"012301"

c# arrays string

55
推荐指数
7
解决办法
9万
查看次数

NSMutableArray addObject不起作用

NSMutableArray *categories在我的视图控制器.h文件中声明了一个,并为它声明了一个属性.

在我的.m文件中委托的parser:foundCharacters:方法中NSXMLParser,我有这个代码:

-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string  
{  
    if (elementFound)  
    {  
        element = string;  
        [self.categories addObject:element];  
    }  
}
Run Code Online (Sandbox Code Playgroud)

但是当我[self.categories addObject:element]在调试模式中踩到它后将鼠标悬停在线上时,XCode告诉我大小为0x0,0个对象.我的XML文件中有3个元素,因此数组中应包含3个项目.

我错过了一些非常明显的东西,我无法弄清楚是什么.

objective-c nsmutablearray

54
推荐指数
2
解决办法
7万
查看次数

.NET CLR是否真的针对当前处理器进行了优化

当我读到有关C#或Java等JITted语言的性能时,作者通常会说它们理论上应该/可以胜过许多本机编译的应用程序.理论上,本机应用程序通常只是为处理器系列(如x86)编译,因此编译器无法进行某些优化,因为它们可能并非真正在所有处理器上进行优化.另一方面,CLR可以在JIT过程中进行特定于处理器的优化.

有谁知道微软(或Mono)的CLR在JIT过程中是否实际执行特定于处理器的优化?如果是这样,有什么样的优化?

.net c# clr optimization jit

44
推荐指数
2
解决办法
2988
查看次数

Gmail语法荧光笔

我通过Gmail将代码发送给了我的朋友,但正如您猜测的那样,代码未在Gmail中突出显示.是否有解决方案来突出显示通过Gmail发送的代码?

gmail syntax-highlighting highlighting

40
推荐指数
4
解决办法
2万
查看次数

通过指针算法访问数组值与使用C中的下标访问数组值

我继续读到,在C中,使用指针算法通常比下标数组访问更快.即使使用现代(据称是优化的)编译器,这是真的吗?

如果是这样,当我开始在Mac上学习C到Objective-C和Cocoa时,情况仍然如此吗?

在C和Objective-C中,哪种是数组访问的首选编码风格?被认为(由各自语言的专业人士)更清晰,更"正确"(缺乏更好的术语)?

c arrays pointers objective-c pointer-arithmetic

38
推荐指数
3
解决办法
1万
查看次数

需要帮助理解K&R C第2章中的"getbits()"方法

在第2章,关于按位运算符的部分(第2.9节),我无法理解其中一个示例方法是如何工作的.

这是提供的方法:

unsigned int getbits(unsigned int x, int p, int n) {
    return (x >> (p + 1 - n)) & ~(~0 << n);
}
Run Code Online (Sandbox Code Playgroud)

这个想法是,对于给定的数字x,它将返回从位置p开始的n位,从右边开始计数(最右边的位是位置0).给出以下方法:main()

int main(void) {
    int x = 0xF994, p = 4, n = 3;
    int z = getbits(x, p, n);
    printf("getbits(%u (%x), %d, %d) = %u (%X)\n", x, x, p, n, z, z);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

getbits(63892 (f994), 4, 3) = 5 (5)

我得到了部分内容,但我对"大局"感到困扰,主要是因为我不理解的比特(没有双关语).

我特别遇到问题的部分是补充部分:~(~0 << …

c bit-manipulation operators bit-shift complement

28
推荐指数
3
解决办法
9399
查看次数