我编写了以下代码,用于将十进制数转换为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) 这是一个采访问题:
给您一个名为的char变量ch,当您知道它代表一个以二进制形式表示的数字时,它的八位中只有一位等于“ 1”。IE,唯一可能的值为ch:0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80。
给定变量ch,我需要编写最有效的代码来获取该“ 1”位的索引。例如:如果ch == 0x1->结果为0。-- ch == 0x4结果为2。
显而易见的方法是使用开关盒,但我需要更高效的东西。
您可以在此处进行一些有效的操作吗?
这是我在采访中被问到的一个问题:
实现一个获得整数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.
然后采访者说:"如果你不能使用阵列怎么办?" - 在这里我被卡住了
好像有第四种方式......有什么建议吗?
我写了以下代码:
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?