小编Joh*_*ohn的帖子

表达式没有评估为常量c ++

我编写了以下代码,用于将十进制数转换为base2.可能不是最好的,但它在日食上起作用.但是,当我尝试在visual studio上运行它时,我在第10行得到了这个错误消息(强调):"表达式没有评估为常量".这是为什么?

long base2(int number) {
    int remainder, sizeOfRetNum, isNegative = 0;
    if (number<0)
        isNegative = 1;
    int temp = number;
    while (temp != 0) {
        sizeOfRetNum++;
        temp = temp / 2;
    }
    char ansString[sizeOfRetNum]; // ********line 10********
    int j = sizeOfRetNum - 1;
    while (number != 0) {
        remainder = number % 2;
        number = number / 2;
        if (remainder == 0)
            ansString[j] = '0';
        else
            ansString[j] = '1';
        j--;
    }
    long ansNum = atol(ansString);
    if (isNegative == 1) …
Run Code Online (Sandbox Code Playgroud)

c++

16
推荐指数
2
解决办法
3万
查看次数

查找char变量中唯一的“ 1”位的索引的最有效方法(在C中)

这是一个采访问题:
给您一个名为的char变量ch,当您知道它代表一个以二进制形式表示的数字时,它的八位中只有一位等于“ 1”。IE,唯一可能的值为ch0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80
给定变量ch,我需要编写最有效的代码来获取该“ 1”位的索引。例如:如果ch == 0x1->结果为0。-- ch == 0x4结果为2。

显而易见的方法是使用开关盒,但我需要更高效的东西。
您可以在此处进行一些有效的操作吗?

c algorithm performance bits bit-manipulation

5
推荐指数
1
解决办法
387
查看次数

如果你得到7则返回3的所有方式,反之亦然 - 面试问题

这是我在采访中被问到的一个问题:
实现一个获得整数n的函数并执行以下操作:
1.如果n是3 - >返回7.
2.否则如果n是7 - >返回3.
3.否则返回你喜欢的任何数字(未定义的行为).

还描述了每种方式的运行时和空间复杂性.

所以首先我给出了使用if-else语句的简单方法 - 并说它是O(1)运行时+空间复杂度.然后面试官说:"如果你不能使用if语句(包括switch-case和其他if语句的相似之处)怎么办?"

所以我建议使用按位运算:return n^=4.说它是O(1)运行时+空间复杂性.然后面试官说:"如果你不能使用按位操作怎么办?"

所以我建议使用这样的数组:

int mem[8] = {-1, -1, -1, 7, -1, -1, -1, 3}; 
return mem[n];               
Run Code Online (Sandbox Code Playgroud)

说它是O(1)运行时+空间复杂性,如果我们有大数而不是3和,它怎么可能是无效的7.

然后采访者说:"如果你不能使用阵列怎么办?" - 在这里我被卡住了

好像有第四种方式......有什么建议吗?

algorithm performance time-complexity

5
推荐指数
2
解决办法
144
查看次数

在表达式中减去NASM宏的意外结果

我写了以下代码:

 section .text
    %define len msg-4
    global _start 
    msg: db "Thank you"
    var: dd 0x31323334

_start:
    mov ecx, msg
    debug:
    mov edx, var-len ; **** the problem is here
    mov ebx, 1
    mov eax, 4
    int 80h
    mov eax, 1 
    mov ebx, 1
    int 80h ; exit         
Run Code Online (Sandbox Code Playgroud)

我希望edx保持值13,因为var-len= var-msg+4= 13(var的地址与msg的距离是9,因为msg是9个字节).因此,我认为这段代码会打印"谢谢".

但相反,edx得到了5,并且打印了"谢谢".

为什么edx得到5而不是13

assembly nasm

3
推荐指数
1
解决办法
80
查看次数