1.參加位運算的數據可以是任何類型的數據。請問這句話的說法是正確的嗎?
答案:錯誤
位運算符主要用于整型數據(如int
、unsigned int
、long
、unsigned long
等)和字符型數據(如char
和unsigned char
),因為這些類型的數據在內存中以二進制形式直接存儲,位運算符可以直接對它們的二進制位進行操作。
如果嘗試對非整型數據(如浮點數、字符串或對象等)使用位運算符,將會導致編譯錯誤。他們的內部表示與整形不同。
2.一個全局變量tally,兩個線程并發執行(代碼段都是ThreadProc),問兩個線程都結束后,tally取值范圍為_______
1 2 3 4 5 |
|
A[50,100]
B[100.100]
C[1275,2550]
D[2550,2550]
答案:A
在兩個線程并發的過程中,a線程對tally加1后,還沒有更新tally在內存中的值,線程b讀取tally值,執行加1,更新tally為1,然后a線程重新讀取tally值,這樣交替運行,最終為50 最大值的情況: a線程對tally加到50后,更新tally在內存中的值為50,然后線程b讀取tally值,再執行加50運算,結果為100;
如果對total+=1加上互斥鎖,才會固定為100。
3.下面函數的輸出結果是()
1 2 3 4 |
|
A0
B-1
C-2
D1
答案:?C
首先0000 0000 0000 0000 0000 0000 0000 0001左移31位得
1000 0000 0000 0000 0000 0000 0000 0000 (-2147483648)
與1異或 得1111 1111 1111 1111 1111 1111 1111 1110
補碼轉原碼,-1并將除符號位的位取反 1000 0000 0000 0000 0000 0000 0000 0010(-2)
4.下列程序的運行結果是0.請為橫線處選擇合適的程序()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
Avoid (Base::*q)(Base,Base)
Bvoid *q(Base,Base)
Cvoid *q()
Dvoid (*q)(Base,Base)
答案 D 靜態成員函數不用加作用域非靜態成員函數要加作用域
5. 下列關于運算符重載的敘述中,正確的是(????????)
A通過運算符重載,可以定義新的運算符
B有的運算符只能作為成員函數重載
C若重載運算符+,則相應的運算符函數名是+
D重載二元運算符時,必須聲明兩個形參
答案 B?
一般情況下,單目運算符最好重載為類的成員函數,雙目運算符最好重載為類的友元函數。
關于選項 A,通過運算符重載不能創建全新的運算符符號,而只能改變已有的運算符的行為。
關于選項 B,有些運算符可以作為成員函數進行重載,而有些則不能。具體要根據運算符的性質和所需的操作數類型來決定。
關于選項 C,重載運算符時,相應的運算符函數名并不一定與運算符本身的符號相同,而是通過運算符函數的命名來定義。
關于選項 D,如果用成員函數重載,只寫一個參數的話,默認就是調用者為第一個參數。
作者:陳讓然
鏈接:牛客網公司真題_免費模擬題庫_企業面試|筆試真題
來源:牛客網
6.以下說法不正確的是?
A類成員的定義必須放在類定義體內部
B類的一個成員只能具有一種訪問控制屬性
C在類中,不作特別說明的數據成員均為私有類型
D構造函數和析構函數是特殊的成員函數,因此不允許重載
E類成員的定義必須是成員變量在前、成員函數在后
答案 :ADE
A:類成員的聲明要放在類定義體內部,而定義可以在外部
D:? 構造函數可以重載,析構函數不可以
E: 沒有順序要求
7 閱讀C語言代碼輸出()
1 2 3 4 5 6 7 8 |
|
A3 3
B2 2
C2 3
D3 2
答案: A
prinf從右到左編譯,從左到右輸出,*p已經是++p之后的了