程序员面试宝典。。。突破心理防线
今天偶然看見有朋友書架上有一本程序員面試寶典,前四章非技術,沒仔細看。從第五章開始。習題的確是摳得很細但不小的內容。第5.4節是類型轉換,這里考的是類型提升type promotion。題目如下:
#include <iostream>
using namespace std;
int main()
{
unsigned char a=0xA5;
unsigned char b=~a>>4;
printf("b=%d/n", a);
return 0;
}
作者給出的結果是對的,不過解釋錯誤?!?span style="color: #ff0000;">對于第二個問題:因為“>>”的優先級高于“~”,這個解釋別開生面,突破了心理防線。我記得~優先級高于>>,google一下,確認了自己沒錯。于是作者后面的解釋就是穿鑿附會了。網上沒有人解釋這本書的這個問題,我就來試試吧。
如果 >> 高于 ~,那么 ~x>>1 恒等于 ~(x>>1)
敲如下代碼就知道了
#include<stdio.h>
int main()
{
?unsigned int x = 0x80000000;
?unsigned int y = ~x>>1;
?unsigned int z = ~(x>>1);
?printf("%X =?= %X/n", y, z);
}
?
正確的解釋如下:
對于語句 unsigned char b = ~a>>4;
~a???????? :類型unsigned char =提升=>?類型int ,值0xA5 =not操作=> 值0xFF FF FF 5A???
~a>>4? :值0xFF FF FF 5A?????=sar操作=>?值0xFF FF FF F5?????? (因為int,所以sar操作;若其類型為unsigned int,則shr操作)
對b賦值 :截斷0xFF FF FF F5為0xF5,即245。
?
?
?
另發現編譯原理龍書第一版的前端講得比較好;第二版的后端講得比較好。結合起來看更受益。
?
總結
以上是生活随笔為你收集整理的程序员面试宝典。。。突破心理防线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据泄漏、删除事件频发,企业应如何构建安
- 下一篇: Python-Django毕业设计好又多