c語言筆面試題錯題解析5

2021-07-24 21:01:27 字數 2090 閱讀 7167

1.signed char a = 0xe0;

unsigned int b= a;

unsigned char c= a;

下面說法正確的是?

a (a>0)&&(b>0)為真

b  c== a 為真

c  b 的16進製為0xffffffe0

d  都不對

有符號數最高位為1,所以a為負數;

負數原碼轉補碼是符號位不變,其他各位取反,然後加1; 

無符號數的原,反,補碼一樣 ,

補碼轉原碼:a = 0xe0的補碼是1110 0000,所以a的原碼是1010 0000 = -32 。

c是無符號數1110 0000就是它的原碼,所以c = 224 。

signed char轉signed int: 將a的原碼拓展為32位編碼1000 0000 0000 0000 0010 0000 ;

有符號負數原碼轉補碼為,之後signed int轉unsigned int同理:1111 1111 1111 1111 1110 0000 = 0xffffffe0 = b。 

2.int a= 5,則++(a++)的值是?

++ 是一目運算子,自增運算,它只能用於乙個變數,即變數值自增1, 不能用於表示式。

++(a++) 裡,小括號優先。

(a++) 是 表示式,按運算規則,不能對表示式作自增運算。所以編譯出錯。

3.下面四個表示式中錯誤的一項是?

a a+=(a++)

b a+=(++a)

c (a++)+=a

d(++a)+=(a++)

a: a+=(a++)    先計算a++ ,因為a為後++,a左邊是左值不會報錯 ;

b: a+=(++a)    先計算++a,因為a為前++,a左邊是左值不會報錯 ;

c::(a++) += a  這個是錯誤的。因為左值只能是變數,不能是表示式,(a++)是後++,所以a不會先計算a++,是表達

式,所以會報錯。 

d:(++a) +=(a++) 先計算++a,然後再去計算a +=(a++) ,所以左邊也是左值。

4.#include

int d = 1;

void fun( int p)

main()

這一題主要是區域性變數與全域性變數的區別:

先看函式裡面: 

最終要輸出d的值,而p++的意義是1)先執行d=d+p,2)再在執行下一步printf的時候同時執行p++;所以這個函式關

於d只做了乙個d=d+p的操作; 

然後再看函式外面: 

已定義d=1;這裡的d是全域性變數,生命週期到全程式結束。 

再看main函式: 

(1)a=3; 

(2)在區域性變數d=5,p=a=3的情況下,執行d=d+p,d的值為8,輸出; 

(3)在全域性變數d=1,a=3的情況下,執行d=d+a,d的值為4,輸出; 

所以結果為8,4。

5.#include

void main() 

;  int p[6][2] = ,,,,,}, i ; 

for (i=0; i<6; i++) 

printf(w); }

輸出結果為?

程式首初始化字元陣列a[ 5 ][ 10 ]和二維陣列p [ 6 ] [ 2 ] 。

執行for迴圈語句,迴圈變數i從0取值到5,得到字元數w [ ]的值,並通過字串輸出函式puts進行輸出操作。

w [ 0 ] = a [ 0 ] [ 1 ],w [ 1 ] = a [ 1 ] [ 5 ],w [ 2 ] = a [ 0 ] [ 0 ],w [ 3 ] = a [ 0 ] [ 2 ],w [ 4 ] = a [ 1 ] [ 4 ],w [ 5 ] = a[ 

4 ] [ 4 ],因此最後字元陣列w的結果為black。

6.int f(unsigned int n)

return m; }

f(2486)的返回值是?

n&=(n-1)相當於n=n&(n-1),執行一次也就相當於把二進位制中的最低位的1置為0;迴圈執行,也就是計算2468的二進

制中有多少個1。

2468=2048+256+128+32+16+4+2,所以一共有7個1。

面試題解析

1.繼承執行順序 當兩個類之間有繼承關係時,第一次構造子類的例項時,是按照如下順序進行的 1.子類的靜態成員初始化語句 2.子類的靜態建構函式 3.子類的非靜態成員初始化語句 4.父類的靜態成員初始化語句 5.父類的靜態建構函式 6.父類的非靜態成員初始化語句 7.父類的建構函式 8.子類的建構函式...

C C 面試題 錯題筆記與解析

有定義語句 int b char c 10 則正確的輸入語句是 a.scanf d s b,c b.scanf d s b,c c.scanf d s b,c d.scanf d s b,c 答案 ab 實踐 高階版 2.關於記憶體的分配與釋放,下列說法正確的是 a.c語言的記憶體分配及釋放為new...

面試題解析記載

工具類原始碼 hashcode 在建立類的時候要覆蓋equal 和 hash 方法 arraylist 基礎陣列來實現的,遍歷查詢快,但是刪除需要移動陣列資料,處理會慢。linkedlist 實現原理通過鍊錶實現,插入快,查詢和刪除慢。hashmap 非執行緒安全的,通過鍊錶實現的,查詢速度回快很多...