面試題
一、下列c++**的輸出結果是什麼?
int i = 1;
void main()
a、mian裡面的i是乙個未定義值
b、main裡面的i的值為1
c、main裡面的i的值為0
d、編譯出錯
答案--a
解析--在c++中這樣做是完全合法的(但顯然不合理),int i = i, 後面的i是已經在main裡面宣告的i,而不是main外面的i(區域性變數覆蓋全域性變數),所以i只是未定義而已(隨機值)。
面試題二、下列兩段**輸出結果是什麼?
int a,x;
for (a=0,x=0;a<=1 && !x++;a++)
cout<
答案--第一段結果為21,第二段結果為12
解析--關於&&運算子,如果左邊的值為0,則右邊的運算元將棄之不管,||運算子也有類似道理
面試題三、下面**輸出結果是什麼?
int arr = ;
int* ptr = arr;
*(ptr++)+=123;
printf("%d,%d\n",*ptr,*(++ptr));
答案--8,8
解析--要注意執行完*(ptr++)+=123;後,ptr已經指向第二個元素,第二個要注意的就是輸出語句(printf、cout)的執行順序是從右到左,所以先執行*(++ptr),ptr指向第三個元素
面試題四、下面程式輸出結果是多少?
float a=1.0f;
cout<<(int)a<
答案--第一段**:1
106535216
false
第二段**:0
0 ture
解析--(int)a實際上是以浮點數a為引數構造了乙個整型數,該整數的值是1,(int&)a則是告訴編譯器將a當作整數看(
並沒有做任何實質上的轉換)。因為1以整數形式存放和以浮點形式存放其記憶體資料是不一樣的,因此兩者不等。對b的兩種轉換意義同上,但是0的整數形式和浮點形式其記憶體資料是一樣的,因此在這種特殊情形下,兩者相等(僅僅在數值意義上)。
注意,程式的輸出會顯示(int&)a=1065353216,這個值是怎麼來的呢?前面已經說了,1以浮點數形式存放在記憶體中,按ieee754規定,其內容為
0x3f800000(大家可以直接除錯看彙編,關於浮點數儲存方式,可以看我的另外一篇部落格)。這也就是a這個變數所佔據的記憶體單元的值。當(int&)a出現時,它相當於告訴它的上下文:「
把這塊位址當做整數看待!不要管它原來是什麼。」這樣,內容0x0000803f按整數解釋,其值正好就是1065353216(十進位制數)。
通過檢視彙編**可以證實「(int)a相當於重新構造了乙個值等於a的整型數」之說,而(int&)的作用則僅僅是表達了乙個型別資訊,意義在於為cout《及==選擇正確的過載版本。
面試題五、下面程式的結果是多少?
unsigned int a = 0xfffffff7;
unsigned char i = (unsigned char)a;
char* b = (char*)&a;
unsigned char* c = (unsigned char*)&a;
printf("%08x,%08x,%08x,%08x",a,i,*b,*c);
答案--fffffff7,000000f7,fffffff7,000000f7
解析--問題不難,但是奇怪的是這麼*b輸出的居然跟int型一樣?哈哈,其實這純屬是巧合而已,如果字元是有符號的,剛好符號位又是1,那麼前面填補的不是0而是1了。
面試題六、下面程式的結果是多少?
unsigned char a = 0xa5;
unsigned char b = ~a>>4+1;
printf("b=%d\n",b);
答案--250
解析--因為+運算子的優先順序高於》,所以b=~a>>5(= ~10101001>>5 = 01010110>>5 = 00000010 = 2 ),奇怪了,不是2嗎?但是在編譯器上執行的結果是250,我們進入彙編指令,會發現儲存變數的暫存器是16位暫存器,所以在暫存器中暫存器表達是 0000 0000 1010 0101取反再移位後就是 0000 0111 1111 1010,unsigned char 型智慧型表示低8位,即250
面試題七、判斷乙個數x是否是2的n次方,不可用迴圈語句
答案--!( x &( x - 1) )
解析--2,4,8,16...轉換為二進位制 10、100、1000、10000....其實就是檢查x的二進位制是否只有乙個1(類似題目,判斷乙個二進位制樹有多少個1)
面試題八、將a、b的值交換,不使用任何中間變數
答案一、a = a+b;
b = a-b;
a = a-b;
該方法很不好,有可能會溢位
答案二、a = a^b;
b = a^b;
a = a^b;
哈哈,你想到了嗎?
元素可以分為塊級元素,行內元素以及行內塊級元素。行內元素的margin或者padding只有margin left和margin right以及padding left和padding right有效果,margin top margin bottom padding top padding bot... 眾所周知,使用 const 宣告的變數必須同時初始化為某個值。一經宣告,在其生命週期的任何時候都不能再重新賦予新值 const a syntaxerror 常量宣告時沒有初始化 const b 3 console.log b 3 b 4 typeerror 給常量賦值const 宣告只應用到頂級原語... 先來看幾個例子,先想一下執行結果,答案稍後揭曉 例一 mylogger logging.getlogger mylogger mylogger.info mylogger info mylogger.warning mylogger warning 例二 mylogger logging.getlo...你可能不知道的東西
你可能不知道的const
你可能不知道的python logging機制