c_lflag
此处设置了&= ~
的新值。但我无法弄清楚这是什么意思|
以及ICANON
在ECHO
和function checkifStringisUnique(str) {
var hash = Object.create(null);
return str.split('').every(function (c) {
return !hash[c] && (hash[c] = true);
});
}
console.log(checkifStringisUnique('abc'));
console.log(checkifStringisUnique('aab'));
之间的含义是什么?
答案 0 :(得分:0)
有点笨拙。正在ICANON
结构的ECHO
字段中清除c_lflag
和termios
个标记。
这是非常非常基本的C语法。您应该花时间查看C位运算符。
答案 1 :(得分:0)
在macOS上,ICANON
和ECHO
的值在/usr/include/sys/termios.h
中定义为:
#define ECHO 0x00000008 /* enable echoing */
#define ICANON 0x00000100 /* canonicalize input lines */
您的机器上的值可能不同;细节并不重要,但关键是每个都是一个单位设置的数字。
|
运算符形成按位'或'这两个数字中的一个:0x000000108
。
~
运算符构成两个数字的按位补码:0xFFFFFEF7
。
&=
获取newattr.c_lflag
中已有的值并形成按位'和'值0xFFFFFEF7
。除了ECHO
和ICANON
位之外,这样做的最终结果是保留已在变量中设置的每个位,这两位都设置为0
。
符号value & ~(bit1 | bit2 …)
是用于清除可能或可能不在整数中设置的位的标准C语言。相应的设置代码为value | (bit1 | bit2 …)
,其中括号是可选的,因为运算符始终相同。你使用bitwise' xor'或^
翻转位 - 将1
更改为0
,反之亦然。