C# 4.0. How can the following be done using lambda expressions?
int[] a = new int[8] { 0, 1, 2, 3, 4, 5, 6, 7 };
// Now fetch every second element so that we get { 0, 2, 4, 6 }
Run Code Online (Sandbox Code Playgroud) (如果是这样的话,我会自己做的.)
我的问题:
为方便起见,我倾向于避免间接/索引寻址模式.
作为替代,我经常使用立即,绝对或寄存器寻址.
代码:
; %esi has the array address. Say we iterate a doubleword (4bytes) array.
; %ecx is the array elements count
(0x98767) myloop:
... ;do whatever with %esi
add $4, %esi
dec %ecx
jnz 0x98767;
Run Code Online (Sandbox Code Playgroud)
在这里,我们有一个序列化的组合(dec和jnz),它可以防止正常的乱序执行(依赖).
有没有办法避免/破坏dep?(我不是装配专家).
这是c中的代码示例,我不确定条件“k&1”是什么意思。
int k,i,c;
k = i >> c;
if (k & 1)
printf("1");
else
printf("0");
Run Code Online (Sandbox Code Playgroud) 我知道有一种方法可以找到一个数字是偶数还是奇数使用模数(找到一个数字是偶数还是奇数的最快方法是什么?)但是我想知道是否有类似数学的C#函数.甚至还是Math.Odd.使用模数是唯一的方法吗?
(我知道这听起来像是一个愚蠢的问题,但我敢打赌我的老师,在C#中有一个内置的功能,他声称没有....)
让我们说我正在检查奇数:
(i % 2 == 1)
Run Code Online (Sandbox Code Playgroud)
编译器是否会将该操作转换为:
if(a & 1)
Run Code Online (Sandbox Code Playgroud)
?
我知道按位操作更快,有时我会使用位.
但是我的问题是:如果正常的算术更具可读性(在大多数情况下),如果编译器稍后可以转换它,我何时应该使用bitwise?
或者我总是在有可能的时候使用bitwise(即使它不太可读)?
我知道的原理a&1:例如:
4&1: 0100
0001
= 0000
Run Code Online (Sandbox Code Playgroud)
和
5&1: 0101
0001
= 0001
Run Code Online (Sandbox Code Playgroud)
但我想知道原理是什么以及如何a%2
哪个更快,a%2或者a&1?
我想知道一个数字是不是奇数.我想比较LSB而不是使用modulo.
int main(int argc, char*argv[])
{
if ( argc >1 ) {
if ( atoi(argv[1]) & 0x1 == 1 )
printf ("odd num \n");
}
return 0;
}
# ./odd 2
# ./odd 3
odd num
# ./odd 22
# ./odd 23
# ./odd 33
odd num
# ./odd 43
# ./odd 52
odd num
# file odd
odd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x56f7eb1e7a35762bd8b786eefb5516a14549fc1f, not stripped
Run Code Online (Sandbox Code Playgroud)