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 非執行緒安全的,通過鍊錶實現的,查詢速度回快很多...