这是昨晚应该给我的一个更大的编程任务的一部分.无法弄清楚这个问题,但我很好奇它是如何解决的.
该函数int greatestBitPos(int x)应返回一个标记最高位的位置的int掩码.如果x == 0,则返回0.不允许控制结构(if,while,?:).
例: greatestBitPos(96) = 0x40
合法经营者:!〜&^ | + << >> =
这个关于位杂乱的网站是我用作起点的东西,特别是第二种算法.但是,它使用<比较,这个问题不允许.
欢迎所有的想法,谢谢!
编辑:请假设2的补码,32位整数.对于所有负数,它们的最高位设置,因此返回值应为0x80000000.
我今天遇到了这个难题.显然,这不是正确的风格,但我仍然很好奇为什么没有输出.
int x = 9;
int y = 8;
int z = 7;
if (x > 9) if (y > 8) System.out.println("x > 9 and y > 8");
else if (z >= 7) System.out.println("SHOULD OUTPUT THIS x <= 9 and z >= 7");
else
System.out.println("x <= 9 and z < 7");
Run Code Online (Sandbox Code Playgroud)
上面运行时没有输出.但是,当我们为if语句添加括号时,突然逻辑行为与我期望的一样.
int x = 9;
int y = 8;
int z = 7;
if (x > 9) {
if (y > 8) System.out.println("x > 9 and y > 8"); …Run Code Online (Sandbox Code Playgroud) 我有以下汇编代码:
0x08048d36 <+0>: push %ebp
0x08048d37 <+1>: mov %esp,%ebp
0x08048d39 <+3>: push %esi
0x08048d3a <+4>: push %ebx
0x08048d3b <+5>: sub $0x20,%esp
0x08048d3e <+8>: lea -0x10(%ebp),%eax
0x08048d41 <+11>: mov %eax,0xc(%esp)
0x08048d45 <+15>: lea -0xc(%ebp),%eax
0x08048d48 <+18>: mov %eax,0x8(%esp)
0x08048d4c <+22>: movl $0x804a28a,0x4(%esp)
0x08048d54 <+30>: mov 0x8(%ebp),%eax
0x08048d57 <+33>: mov %eax,(%esp)
0x08048d5a <+36>: call 0x8048758 <__isoc99_sscanf@plt>
0x08048d5f <+41>: cmp $0x1,%eax
0x08048d62 <+44>: jg 0x8048d69 <phase_5+51>
0x08048d64 <+46>: call 0x80491a8 <explode_bomb>
0x08048d69 <+51>: mov -0xc(%ebp),%eax
0x08048d6c <+54>: and $0xf,%eax
0x08048d6f <+57>: mov %eax,-0xc(%ebp) …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
//test file
#include <iostream>
#include "stat.h"
#include "frequency.h"
using namespace std;
int main(){
cout << "helo"<< endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时,我得到:
test.cc:7: error: expected unqualified-id before "using"
test.cc:7: error: expected `,' or `;' before "using"
Run Code Online (Sandbox Code Playgroud)
知道这里发生了什么吗?
从列表中分组获取元素的 Pythonic 方法是什么?即,我想要列表的前 10 个元素,然后是接下来的 10 个元素,然后是接下来的 10 个元素,依此类推。