以下参数测试的顺序是什么(在C++中)?
if (a || b && c)
{
}
Run Code Online (Sandbox Code Playgroud)
我刚刚在我们的应用程序中看到了这个代码,我讨厌它,我想添加一些括号来澄清顺序.但我不想添加括号,直到我知道我将它们添加到正确的位置.
编辑:接受的答案和跟进
这个链接有更多的信息,但它并不完全清楚它的含义.好像|| 和&&是相同的优先顺序,在这种情况下,它们从左到右进行评估.
我不断失去关于如何重新定义|| (“或”)或&&(“和”)二元运算符的参考。我在某处读到,必须首先做的事情importall Base。然后我尝试了
Base.||( x::MyType, y::MyType ) = dosomething( x, y )
Run Code Online (Sandbox Code Playgroud)
并且
Base.or( x::MyType, y::MyType ) = dosomething( x, y )
Run Code Online (Sandbox Code Playgroud)
但这些都不起作用。如果有人可以提供参考解释如何执行此操作的基础知识,我将不胜感激...我无法找到诸如“在 Julia 中重新定义二元运算符”之类的查询...
overloading operator-overloading binary-operators or-operator julia
令人怀疑的结果如下代码:
public static void main (String[] args)
{
int i = 2;
i = i+=2 + i++;
System.out.println(i); }
Run Code Online (Sandbox Code Playgroud)
期待8作为输出,因为'i + = 2'应该更新 i,但它不表现如此.
产量:6
我推断短手赋值运算符按预期返回4但不在变量i中更新相同.任何解释将不胜感激.
我在C中写了这个小代码:
int leftrotate (int x, int offset)
{
return ( x << offset ) | ( x >> (32 - offset));
}
Run Code Online (Sandbox Code Playgroud)
我期望二进制leftrotate一个整数,这意味着我期望将所有位从给定的偏移移动到左边,并且如果数字太大则将其缩小.
例如,当我输入:
10100110100110100101000011111101 = 2795131133 = a69a50fd
Run Code Online (Sandbox Code Playgroud)
我期待作为回报:
01101001101001010000111111011010 = 1772425178 = 69a50fda
Run Code Online (Sandbox Code Playgroud)
(请注意,十六进制一个在开始时正处于结束因为我选择在该特定示例中的偏移4)
但相反,我得到了:
11111111111111111111111111111010 = 4294967290 = fffffffa
Run Code Online (Sandbox Code Playgroud)
int吗?我应该用uint吗?或许char?谢谢 !!!
我在Delphi中有源代码我按照http://hscripts.com/tutorials/cpp/bitwise-operators.php为按位运算符在C++ Builder中转换它,但结果是不同的
Delphi中的源代码
procedure TForm1.Button1Click(Sender: TObject)
var
tmp, dynamicINT : integer;
begin
dynamicINT := 42080;
tmp := ((dynamicINT shl 1) or (dynamicINT shr 31) and $7FFFFFFF);
Edit1.Text := IntToHex(tmp, 4);
end;
Run Code Online (Sandbox Code Playgroud)
德尔福结果:148C0正确!
C++ Builder中的源代码
void __fasctall TForm1::Button1Click(TObject *Sender)
{
int tmp = 0;
int dynamicINT = 42080;
tmp = ((dynamicINT << 1) || (dynamicINT >> 31) && 0x7FFFFFFF);
Edit1->Text = IntToHex(tmp, 4);
}
Run Code Online (Sandbox Code Playgroud)
C++ Builder结果:0001???
转换有什么问题?
我正在使用C++ Builder 6和Delphi 7
Go 中是否有执行无符号移位(即无符号右移)操作?Java 中是这样的
0xFF >>> 3
Run Code Online (Sandbox Code Playgroud)
关于此事我唯一能找到的就是这篇文章,但我不确定我必须做什么。
提前致谢。
有没有办法计算:
/** clipped(a - b) **/
unsigned char clipped_substract(unsigned char a, unsigned char b)
{
return a > b ? a - b : 0;
}
Run Code Online (Sandbox Code Playgroud)
使用一些二进制操作而不是测试?
我有一个代码条件,例如以下
for(int i=0;i<Number;i++)
{
int* pIn = pInputArr[i];
int* pOut = pOutputArr[i];
for(int Input_number =0;Input_number<100;Input_number++)
{
Some_fun(pIn,pOut );
if (Input_number % 2 == 0)
{
pIn = pOutputArr[i];
pOut = pInputArr[i];
}
else
{
pOut = pOutputArr[i];
pIn = pInputArr[i];
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想用一种更有效的嵌入式编程方式来代替它,因为有人告诉我,嵌入式编程中的分支操作成本很高。有没有更简洁的方法来使用位操作而不使用 if 条件来实现这一点?也不使用任何内置功能,例如swap和其他。
基于奇数和偶数条件,我正在交换作为Some_func. 我在几个帖子中检查了类似的查询,但没有发现它们有用。任何建议将不胜感激。
在JavaScript 中,我们可以使用 reducer 构建其他类型的字符串(例如 num to string):
const string = [1,2,3,4,5].reduce((acc,e) => acc += e, "") //"12345"
Run Code Online (Sandbox Code Playgroud)
在Java 中,从其他类型构建字符串时,这种模式并不容易:
ArrayList<Integer> arrayListOfIntegers = (ArrayList<Integer>) Arrays.asList(1,2,3,4);
String string = arrayListOfIntegers.stream().reduce("", (String acc, Integer e) -> acc += e); // acc += e throws error
Run Code Online (Sandbox Code Playgroud)
错误是:
“错误的返回类型:字符串不能转换为整数”
这种模式在 Java 中是不可能的吗?
据我了解有关Haskell的褶皱,foldl (-) 0 [1..5]给出的结果是-15通过计算0-1-2-3-4-5,并foldr (-) 0 [1..5]给出了结果-5的计算5-4-3-2-1-0.为什么那么这两个foldl (++) "" ["a", "b", "c"]和foldr (++) "" ["a", "b", "c"]给出的结果"abc",而结果foldr是不,相反,"cba"?
有什么我缺少理解之间的差异foldl和foldr?
haskell functional-programming binary-operators fold associativity
binary-operators ×10
c++ ×3
c ×2
java ×2
binary ×1
c++builder ×1
delphi ×1
embedded ×1
fold ×1
go ×1
haskell ×1
if-statement ×1
java-stream ×1
javascript ×1
julia ×1
or-operator ×1
overloading ×1
reduce ×1