32位機上根據下面的代碼,問哪些說法是正確的?
signed char a = 0xe; unsigned int b = a; unsigned char c = a;
A. a > 0 && c > 0 B. a == c 爲真 C. b 的十六進制表示爲: 0xffffffE0 D. 上面都不對
答案: 【C】
輸出:算法
a - dec: -32 b - hex: ffffffe0 // 高字節補符號位 c - dex: 224
說明:
有符號與無符號segmentfault
下面哪些選項能夠編譯經過?
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] + 1 C. (int*)&a + 1 D. (int*)((char*)&a + sizeof(int))
答案:【A】
說明:函數
Type* p; p+n; <--> (unsigned int)p + n * sizeof(Type) 數組名可看做指向第一個元素的常量指針 a 類型 ==> int* &a 類型 ==> int(*)[10] a[0] 類型 ==> int A. 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】
說明:spa
棧: p 常量區:"hello, word"
下面哪些函數調用必須進入內核才能完成?
A. fopen B. exit C. memcpy D. strlen
答案:【A B】
說明:線程
A. 打開設備、文件。將觸發設備驅動程序的調用,驅動程序運行於內核中。 B. 退出進程。由內核管理。 C. 內核空間可完成。 D. 內核空間可完成。
死鎖發生的必要條件?
A. 互斥條件 B. 請求和保持 C. 不可剝奪 D. 循環等待
答案:【A B C D】指針
有兩個線程,最初 n=0, 一個線程執行 n++; n++; 另外一個執行 n+=2; 問,最後可能的 n 值?
A. 1 B. 2 C. 3 D. 4
答案:【B C D】
說明:code
++ 非原子操做,實際會對應多條彙編語句,其中每一條彙編語句執行完成後均可能被打斷。 例 n++ 分解三步:取n值,加1,寫 n 值回內存。 B. 線程1 n++;線程1 n++ 將要寫 n(2) 值回內存以前被線程2打斷,此時線程2完成n++(1+2),回寫內存3,線程1繼續運行,回寫內存2 ==> 2 C. 線程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】
說明:排序
排序算法 | 時間複雜度 | 穩定性 |
選擇排序 | O(n2) | 不穩定 |
插入排序 | O(n2) | 穩定 |
冒泡排序 | O(n2) | 穩定 |
希爾排序 | O(n2/3) | 不穩定 |
歸併排序 | O(nlogn) | 穩定 |
快速排序 | O(nlogn) | 不穩定 |
對於下列程序,在一個 big endia 的32位機器上, b 的結果是?
unsigned int a = 0x1234; char b = *((char*)&a); A. 0x12 B. 0x34 C. 0x00 D. 程序崩潰
答案:【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 緣由: 有符號整型數的右移操做,低位被移除,高位補符號位。