昊一源科技——昊一源科技 嵌入式笔试, 校招,题目记录及解析
昊一源科技——昊一源科技 嵌入式笔试, 校招,题目记录及解析
1 补码11111001B对应的真值用十进制表示为()
正数的补码等于自身,这说明他是个负数 ,负数补码等于反码加1 ,
反码是11111000 原数是100000111 -7
2 以下为MCS51汇编语言问题
设SP值为40H时
执行以下指令:
PUSH #53H
PUSH #54H
MOv A,41H
请问执行完上述指令后寄存器SP和A的值是多少()
SP=43H A=53H
SP=42H A=54H
SP=43H A=54H
SP=42H A=53H
#号是立即数 sp是栈指针,push一个数到栈里, sp就会+1,
应该是选 D
3 网络156.26.0.0/28的广播地址是()(10分)
C
156.26.0.255
156.26.255.255
156.26.0.15
156.26.0.16
156.26.0.0这个地址一共32位;
28位的掩码,所以主机位还有4位;
那么每个子网的最大IP数=2的4次方=16;
156.26.0.0的广播地址就是这个子网的最后一个IP地址;
从156.26.0.0开始第16个地址为156.26.0.15;
所以广播地址为156.26.0.15.
4 以下关于TCP协议特点的描述中,正确的是()(10分)
D
TCP是一个点到点的通信协议
TCP提供了无连接的可靠数据传输
TCP将来自上层的字节流组织成数据报,然后交给IP协议
TCP将收到的报文段组成字节流交给上层
5 在已知int a = 5,b = 5,c=4;表达式(++a == b)? a:c–的值是()(10分)
4
4
3
5
6
6 计算出value的值是
GET_BIT(a,b,c) = 1 << 4-4 = 1<< 0 = 1
2
#define GET_BIT(a, b,c) a<<b-c // 左移5级,减法4级;
void main() {
int a = 1;
int b = 4;
int c = 4;
//GET_BIT(a,b,c) = 1 << 4-4 = 1<< 0 = 1
printf("%d", GET_BIT(a,b,c) + 1); //1 + 1 = 2
}
13
12
2
1
做题的时候,不知道优先级,按顺序算的,做错了
GET_BIT(a,b,c) = 16-4 =12
GET_BIT(a,b,c) + 1 = 13
说明:
同一优先级的运算符,运算次序由结合方向所决定。
简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
7 下面的代码输出结果是
D
char *str = "hollyland";
str[0]=0;
printf("%s\n", str);
hollyand
ollyand
%s
没有输出
将char 型指针字符串,改为字符数组,可以运行了
char str[] = "hollyland";
str[0] = 0;//将字符数组,第一个字符重赋值为 0 ,相当于结束符 ‘\0’,所以后面的字符都不在读取,无输出
8 有如下程序:执行后的输出结果应该是
#include<iostream>
using namespace std;
class cla {
static int n;
public:
cla() { n++; }
~cla() { n--; }
static int get_n() { return n; }
};
int cla::n = 0;
int main() {
cla* p = new cla;
delete p;
cout << "n=";
return 0;
}
0
1
3
4
cout << "n="; 应该是没写完整
9 本程序三位正整数中寻找符合下列条件的整数:它既是完全平方数,又有两位数字相同,例如144、676等,编写程序找出所有满足上述条件的三位数并输出。(20分)
#include<stdio.h>
#define MAX 1000
int a, b, c;
int num = 100, n = 10;
void main()
{
for (; n * n < MAX; n++) {
num = n * n;
a = num / 100;
b = num % 100 / 10;
c = num % 10;
if (a == b || a == c || b == c)
printf("%d\n",num);
}
}