32位机上根据下面的代码,问哪些说法是正确的?siged char a = 0xe;unsigned int b = a;unsigned char c = a;A. a > 0 && c > 0B. a == c 为真C. b 的十六进制表示为: 0xffffffE0D. 上面都不对答案: 【C】输出:a - dec: -32b - hex: ffffffe0 // 高字节补符号位c - dex: 224说明:有符号与无符号下面哪些选项可以编译通过?int i;char a[10];string f();string g(string& str);A. if(!!i){f();}B. g(f());C. a=a+1;D.g(“abc”);答案:【A】说明:B. 只有 const 引用才可以被临时变量(对象)初始化(string f() 将返回一个临时string对象)C. 数组名可看作指向第一个元素的常量指针,无法进行赋值操作D. “abc” ==> const char* 类型int a[10]; 问下面哪些地址不可以表示a[1]的地址?A. a + sizeof(int)B. &a[0] + 1C. (int*)&a + 1D. (int*)((char*)&a + sizeof(int))答案:【A】说明:Type* p;p+n; <–> (unsigned int)p + n * sizeof(Type)数组名可看作指向第一个元素的常量指针a 类型 ==> int*&a 类型 ==> int()[10]a[0] 类型 ==> intA. a + sizeof(int) ==> (unsigned int)a + 4 * sizeof(int)B. &a[0] + 1 ==> (unsigned int)(&a[0]) + 1 * sizeof(int) C. (int)&a + 1 ==> a + 1 ==> (unsigned int)a + 1 * sizeof(int)D. (int*)((char*)&a + sizeof(int)) ==> (int*)((unsigend int)a + 4 * sizeof(char))下面的数据存放在哪些存储区?int main(){ char* p = “hello, word”; return 0;}A. 代码段B. 栈C. 常量取D. 堆答案:【B C】说明:栈: p常量区:“hello, word"下面哪些函数调用必须进入内核才能完成?A. fopenB. exitC. memcpyD. strlen答案:【A B】说明:A. 打开设备、文件。将触发设备驱动程序的调用,驱动程序运行于内核中。B. 退出进程。由内核管理。C. 内核空间可完成。D. 内核空间可完成。死锁发生的必要条件?A. 互斥条件B. 请求和保持C. 不可剥夺D. 循环等待答案:【A B C D】有两个线程,最初 n=0, 一个线程执行 n++; n++; 另一个执行 n+=2; 问,最后可能的 n 值?A. 1B. 2C. 3D. 4答案:【B C D】说明:++ 非原子操作,实际会对应多条汇编语句,其中每一汇编语句执行完成后都可能被打断。例 n++ 分解三步:取n值,加1,写 n 值回内存。 B. 线程1 n++; 线程1 n++ 将要写 n(2) 值回内存之前被线程2打断,此时线程2完成n++(1+2),回写内存3,线程1继续运行,回写内存2 ==> 2C. 线程1 n++;线程2 n+=2, 将要回写n(3)值回内存之前被线程1打断,线程1 n++,回写内存2,线程2继续执行,回写内存3 ==>3 D. 线程1 n++, n++, 线程2 n+=2 ==> 4 下面哪些说法正确?A. 数组和链表都可以随机访问B. 数组的插入和删除可以达到 O(1)C. 哈希表无法进行范围查找D. 二叉树无法进行线性访问答案:【C】说明:A. 链表只可以进行顺序访问B. 数组的插入和删除伴随着相应元素的移动 O(n)D. 二叉树可以进行线索化后进行线性访问基于比较排序的时间复杂度下限是多少?A. O(n)B. O(n^2)C. O(nlogn)D. O(logn)答案:【C】说明:对于下列程序,在一个 big endia 的32位机器上, b 的结果是?unsigned int a = 0x1234;char b = ((char)&a);A. 0x12B. 0x34C. 0x00D. 程序崩溃答案:【C】说明:大端:数据高位,保存在低地址处;数据低位,保存在高地址处编写函数求两个整数 a 和 b 之间的较大值。要求不能使用 if,while, switch, for, ?; 以及任何的比较语句。int max(int a, int b){ int d = a - b; int flag = ((unsigned int)d) >> 31; int array[] = {a, b}; return array[flag];}(unsigned int)d 原因: 有符号整型数的右移操作,低位被移除,高位补符号位。