问题标签 [unary-operator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C ++中是否有“正常”一元逻辑运算符
我的意思是,我们都知道有否定逻辑运算符!
,它可以这样使用:
是否有任何运营商允许这样做:
我知道这可能并不重要,但只是想知道!
c - printf 中的一元运算符
谁能解释我以下的输出。我试图推理一切,并可以解释后面的部分,其中“x”被分配了表达式的值,但无法理解 printf 语句中的答案有何不同!!!
不同的编译器可能表现不同。如果有人可以为任何编译器解释这种行为,那就太好了。
我在 openSUSE 12.1 (Asparagus) (i586) 上使用 gcc (SUSE Linux) 4.6.2
代码 :
输出 :
谢谢
c++ - int& 上的一元 + 运算符
我有以下声明,它编译:
为什么我没有编译器错误?
c++ - 0x80000000 的一元减号(有符号和无符号)
n3337.pdf 草案 5.3.1.8 指出:
一元运算
-
符的操作数应具有算术或无范围枚举类型,结果是其操作数的否定。对整数或枚举操作数执行整数提升。无符号量的负数是通过从 2ⁿ 中减去其值来计算的,其中 n 是提升的操作数中的位数。结果的类型是提升的操作数的类型。
对于某些情况,这就足够了。假设 unsigned int 是 32 位宽,那么(-(0x80000000u)) == 0x80000000u
,不是吗?
尽管如此,我还是找不到关于 unsigned 0x80000000 上的一元减号的任何信息。此外,C99 标准草案 n1336.pdf, 6.5.3.3 似乎对此一无所知:
一元 - 运算符的结果是其(提升的)操作数的负数。整数提升在操作数上执行,结果具有提升的类型。
UPDATE2:让我们假设 unsigned int 是 32 位宽。所以,问题是:C 中的一元减号(有符号和无符号)和 C++ 中的一元减号(仅有符号)呢?
UPDATE1:运行时行为和编译时行为(即常量折叠)都很有趣。
c++ - 仅限 c++:0x80000000 的一元减号
这个问题应该是针对语言律师的。
假设 signed 和 unsigned int 都是 32 位宽。如 n3337.pdf 草案 5.3.1.8 所述,
(-(0x80000000u)) = 0x100000000u-0x80000000u = 0x80000000u
但我找不到问题的答案:签名的0x80000000 的一元减号是什么?是 UB、实现定义还是...?
问题主要是关于运行时计算。
说
不过,欢迎您对其他 2 个案例发表评论:
编译时常量折叠,比如说,
-(INT_MIN)
编译时计算
constexpr
(如果与编译时常量折叠有区别)。
(请在为重复投票之前查看https://meta.stackexchange.com/questions/123713/is-splitting-a-question-a-good-practice 。)
php - javascript和PHP上的三元运算符,不同的输出
我想用一元if在php中做Fizzbuzz,但输出不是我所期望的,我也不明白为什么,所以我将代码复制粘贴到javascript,现在结果符合预期。为什么?
输出
c# - 条件语句检查 Null
我试图弄清楚如何有一个简短的单行条件语句。
如果此日期不为空,则将过滤器添加到当前过滤器列表中:
fromDt ?? filters.Add(FilterType.DateFrom, fromDt);
有没有办法做到这一点?我知道我能做到。。
(fromDt != null) ? "something" : "something_else"
,但我不需要'else',并且真的很想使用??
运算符进行空检查。
java - Hibernate QL中的否定一元运算符
我正在尝试使用以下 hql 切换布尔字段:
不幸的是“QuerySyntaxException:意外令牌:不在附近......”被抛出。
我的问题是:是否有一些支持这种表达的休眠一元运算符?或者有什么众所周知的技巧?
sql 支持这样的查询(postgresql):
antlr - 使用 antlr 简化 smalltalk 语法 - 一元减号和消息链
我正在使用 antlr 编写简单的类似 smalltalk 的语法。它是 smalltalk 的简化版本,但基本思想是相同的(例如消息传递)。
到目前为止,这是我的语法:
1. 一元减号
我对数字的一元减号有疑问(规则的注释部分number
)。问题是减号是有效的二进制消息。更糟糕的是,两个减号也是有效的二进制消息。我需要的是一元减号,以防没有对象可以向其发送二进制消息(例如,-3+4 应该是一元减号,因为 -3 前面没有任何内容)。此外,(-3) 也应该是二进制减号。如果 1 -- -2 是带有参数 -2 的二进制消息“--”,那就太好了,但我可以没有它。我怎样才能做到这一点?
如果我取消注释一元减号,则在解析 1-2 之类的内容时会出现错误 MismatchedSetException(0!=null)。
2. 消息链
在 smalltalk 中实现消息链接的最佳方法是什么?我的意思是这样的:
在这种情况下,每条消息都将发送到同一个对象obj
。应保持消息优先级(一元 > 二进制 > 关键字)。
3. 回溯
大多数语法可以用 解析k=2
,但是当输入是这样的:
解析器尝试将 Obj 匹配为single_keyword_message_selector
并引发UnwantedTokenExcaption
token message
。如果删除k=2
并设置backtrack=true
(像我一样)一切正常。如何删除回溯并获得所需的行为?
此外,大多数语法都可以使用 解析k=1
,所以我尝试k=2
只为需要它的规则设置,但这被忽略了。我做了这样的事情:
但在我在全局选项中设置 k 之前它不起作用。我在这里想念什么?
更新:
从头开始编写语法并不是理想的解决方案,因为我有很多代码依赖它。此外,smalltalk 缺少的一些功能是设计上缺少的。这并不是要成为另一个 smalltalk 实现,smalltalk 只是一个灵感。
在这样的情况下,我会更乐意让一元减号工作:-1+2
或2+(-1)
. 像这样2 -- -1
的情况并不那么重要。
此外,消息链接应该尽可能简单地完成。这意味着我不喜欢改变我正在生成的 AST 的想法。
关于回溯 - 我可以忍受它,只是出于个人好奇在这里问。
这是生成 AST 的少量修改语法 - 也许它有助于更好地理解我不想更改的内容。(temp_variables 可能会被删除,我还没有做出那个决定)。
c++ - 解析树中的一元和二元减号
我正在创建一个包含类似于以下表达式的解析树
3 - 4 * 8
或者
8 * -5
或者
-(10 * 1)
我需要一种方法来区分一元和二元减号。我的语法现在的方式是首先达到二进制减号,但我正在考虑更改它并添加一个包含最后一个变量的标志变量。
例如:如果是5 - 6
该标志持有 5,如果它看到减号并且标志是一个数字,则跳过一元并转到二进制。
但是我不确定如何在 C++ 中实现这一点
任何帮助将不胜感激。
谢谢