使用按位运算符的Termios语法配置

时间:2018-01-27 16:39:20

标签: c bit-manipulation

c_lflag

此处设置了&= ~的新值。但我无法弄清楚这是什么意思|以及ICANONECHOfunction 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'));之间的含义是什么?

2 个答案:

答案 0 :(得分:0)

有点笨拙。正在ICANON结构的ECHO字段中清除c_lflagtermios个标记。

这是非常非常基本的C语法。您应该花时间查看C位运算符。

答案 1 :(得分:0)

在macOS上,ICANONECHO的值在/usr/include/sys/termios.h中定义为:

#define ECHO    0x00000008  /* enable echoing */
#define ICANON  0x00000100  /* canonicalize input lines */

您的机器上的值可能不同;细节并不重要,但关键是每个都是一个单位设置的数字。

|运算符形成按位'或'这两个数字中的一个:0x000000108

~运算符构成两个数字的按位补码:0xFFFFFEF7

&=获取newattr.c_lflag中已有的值并形成按位'和'值0xFFFFFEF7。除了ECHOICANON位之外,这样做的最终结果是保留已在变量中设置的每个位,这两位都设置为0

符号value & ~(bit1 | bit2 …)是用于清除可能或可能不在整数中设置的位的标准C语言。相应的设置代码为value | (bit1 | bit2 …),其中括号是可选的,因为运算符始终相同。你使用bitwise' xor'或^翻转位 - 将1更改为0,反之亦然。