标签: bitwise-operators

如何在Swift中创建NS_OPTIONS样式的位掩码枚举?

在Apple关于与C API交互的文档中,他们描述了NS_ENUM以Swift枚举方式导入标记的C风格枚举的方式.这是有道理的,因为Swift中的枚举很容易作为enum值类型提供,所以很容易看到如何创建自己的.

更进一步,它说这是关于NS_OPTIONS标记的C风格选项:

Swift还导入标有NS_OPTIONS宏的选项.而选项的行为类似于进口枚举,选项还可以支持一些位操作,如&,|~.在Objective-C中,表示使用常量零(0)设置的空选项.在Swift中,用于nil表示没有任何选项.

鉴于optionsSwift中没有值类型,我们如何创建一个C-Style选项变量来使用?

bitwise-operators ios swift

128
推荐指数
5
解决办法
4万
查看次数

什么是按位运算符?

我是一个只是为了好玩而编写代码的人,并没有在学术或专业环境中深入研究它,所以像这些按位运算符这样的东西真的让我感到厌烦.

我正在阅读一篇关于JavaScript的文章,它显然支持按位操作.我一直看到这个地方提到的这个操作,我试着去弄清楚究竟是什么,但我似乎根本没有得到它.那他们是什么?清楚的例子会很棒!:d

还有几个问题 - 按位运算的一些实际应用是什么?你何时可以使用它们?

javascript boolean-logic boolean bitwise-operators

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

两个左尖括号是什么意思?

我看到了一个我以前从未见过的循环:

for (int i = 0; i < (1 << list.Count); i++)
Run Code Online (Sandbox Code Playgroud)

我无法理解是什么(1 << list.Count)意思,也许有人可以解释我这个?

.net c# for-loop list bitwise-operators

118
推荐指数
0
解决办法
6570
查看次数

按位运算符对Java中布尔值的影响

按位运算符应该传输变量并逐位操作它们.在整数,longs,chars的情况下这是有道理的.这些变量可以包含由其大小强制执行的所有值.

但是,在布尔值的情况下,布尔值只能包含两个值.1 =真或0 =假.但是没有定义布尔值的大小.它可以大到一个字节或一点点.

那么在布尔值上使用按位运算符会产生什么影响呢?JVM本质上是将它转换为普通的逻辑运算符并继续前进吗?为了操作的目的,它是否将布尔值视为单个位实体?或者结果未定义以及布尔值的大小?

java boolean bitwise-operators

109
推荐指数
3
解决办法
5万
查看次数

布尔运算符的差异:&vs &&和| vs ||

我知道规则&&,||但是什么是&|?请以一个例子向我解释这些.

java boolean-logic bitwise-operators logical-operators

104
推荐指数
5
解决办法
18万
查看次数

去<<和>>运算符

可能有人请向我解释的使用<<>>进去吗?我想它与其他一些语言类似.

go bitwise-operators

96
推荐指数
8
解决办法
5万
查看次数

什么是| =(单管道相等)和&=(单个&符号相等)的意思

在以下行中:

//Folder.Attributes = FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly;
Folder.Attributes |= FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly;


Folder.Attributes |= ~FileAttributes.System;
Folder.Attributes &= ~FileAttributes.System;
Run Code Online (Sandbox Code Playgroud)

在C#中,|=(单管道相等)和&=(单个&符号相等)是什么意思
我想删除系统属性并保留其他属性...

c# operators bitwise-operators

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

优先级和位掩码操作

我遇到过一个(看似很奇怪的)非常奇怪的案子.

取数字2(0b10)并用1(0b01)进行位掩码

这应该产生0b00相当于0的东西.

然而,这里是薛定谔先生进来的地方:

var_dump(0b10 & 0b01); // int(0)
var_dump(0b10 & 0b01 == 0); // int(0)
var_dump(0b10 & 0b01 != 0); // int(0)
Run Code Online (Sandbox Code Playgroud)

威士忌酒.探戈.狐步舞.

不可否认,对于按位运算符来说,我并不是最敏锐的 - 所以也许我在某个地方有可怕的,可怕的错误?

但是,在Python中:

0b10 & 0b01 == 0 = True

0b10 & 0b01 != 0 = False

...所以?

php bit-manipulation bitwise-operators operator-precedence

94
推荐指数
1
解决办法
4568
查看次数

怎么!!〜(不是不是波浪形/爆炸声波)改变'包含/包含'数组方法调用的结果?

如果您在这里阅读jQuery inArray页面上的注释,那么有一个有趣的声明:

!!~jQuery.inArray(elm, arr) 
Run Code Online (Sandbox Code Playgroud)

现在,我相信双感叹号会将结果转换为类型boolean,值为true.我不明白的是,~在所有这些中使用了tilde()运算符是什么?

var arr = ["one", "two", "three"];
if (jQuery.inArray("one", arr) > -1) { alert("Found"); }
Run Code Online (Sandbox Code Playgroud)

重构if声明:

if (!!~jQuery.inArray("one", arr)) { alert("Found"); }
Run Code Online (Sandbox Code Playgroud)

分解:

jQuery.inArray("one", arr)     // 0
~jQuery.inArray("one", arr)    // -1 (why?)
!~jQuery.inArray("one", arr)   // false
!!~jQuery.inArray("one", arr)  // true
Run Code Online (Sandbox Code Playgroud)

我也注意到,如果我把波浪号放在前面,结果是-2.

~!!~jQuery.inArray("one", arr) // -2
Run Code Online (Sandbox Code Playgroud)

我不明白这里代字号的目的.有人可以解释一下或指向我的资源吗?

javascript jquery operators bitwise-operators

93
推荐指数
10
解决办法
2万
查看次数

+运算符如何在C中工作?

当了解如何原始的运营商,如+,-,*/用C实现,我发现从下面的代码片段一个有趣的答案.

// replaces the + operator
int add(int x, int y) {
    while(x) {
        int t = (x & y) <<1;
        y ^= x;
        x = t;
    }
    return y;
}
Run Code Online (Sandbox Code Playgroud)

似乎此函数演示了如何+在后台实际工作.但是,理解它对我来说太困惑了.我相信这样的操作是使用编译器生成的汇编指令很长时间完成的!

我的问题是:+运算符是否作为MOST实现上发布的代码实现?这是否利用了两个补码或其他依赖于实现的功能?如果有人能解释它是如何工作的,我会非常感激.

嗯...也许这个问题在SO上有点偏离主题,但我认为通过这些运算符来看是有点好的.

c operators bitwise-operators

80
推荐指数
9
解决办法
6720
查看次数