C語言基礎之編譯預處理及位運算

2021-08-02 16:26:31 字數 1996 閱讀 4988

巨集定義

定義:  #define 識別符號 字串     或 #define 識別符號(形參表) 字串

說明:「#」表示這是一條預處理命令。凡是以「#」開頭的均為預處理命令。define為巨集定義命令。「識別符號」為所定義的巨集名。 「字串」可以是常數、表示式、格式串等。 例:

#define pi 3.1415926

#define circum(r) (2.0*pi*(r))

計算周長時: circum=circum(3.4); 

注意:(1)巨集定義不是說明或語句,在行末不必加分號,如加上分號則連分號也一起置換。

(2)巨集定義必須寫在函式之外,作用於為巨集定義起到源程式結束,如要終止其作用域可使用#undef命令

(3)巨集名若在源程式中用雙撇號括起來,則預處理不對其作巨集代換

(4)巨集定義允許巢狀

(5)對輸出格式作巨集定義,可以減少書寫麻煩 例:

#include

#define p printf

#define d "%d\n"

#define f "%f\n"

void main()

條件編譯

條件編譯有幾種形式

1.#if形式

一般格式:

#if《表示式》

《程式段1>

[#else

《程式段2>]

#endif

也可以寫為

#if《表示式》

《程式段1>

#endif

2.#ifdef形式或#ifdef形式

一般格式:

#ifdef (或#ifndef)《識別符號》

《程式段1>

[#else

《程式段2>]

#endif

說明:預處理程式掃瞄到#ifdef,判別其後面的《識別符號》是否被定義過(一般用#define命令定義),從而選擇對哪個程式進行編譯。

位運算子和位運算

位運算子           含義                          舉例

~                       按位取反                    ~a,對變數a中全部二進位制位取反

<<                     左移                           a<<2,a中各位全部左移2位,右邊補0

>>                     右移                           a>>2,a中各位全部右移2位,左邊補0

&                       按位與                       a&b,a和b中各位按位與進行「與」運算

|                        按位或                       a|b,a和b中各位按位與進行「或」運算

^                       按位異或                    a^b,a和b中各位按位與進行「異或」運算           //不同則為1

例:將乙個十進位制數轉換成二進位制數

程式分析:c語言中printf函式提供%x%d%o格式可將乙個整數以十六進製制、十進位制、八進位制形式輸出,但沒有二進位制輸出格式。人工轉換的方法是設定乙個遮蔽數,其中只有一位是1,其餘各位均為0,與被轉換數進行「與」運算,根據運算結果判斷被測試的那一位是1還是0.其餘二進位的測試方法相同。乙個整數佔兩個位元組,共有16個二進位制位。

#include

void main()

} a迴圈右移n位步驟

(1)使a(無符號數)中各位左移(16-n),使右端的n位放到b中的高n位中,其餘各位補0

b=a<<(16-n);

(2)將a中右移n位,由於a不帶符號,所以左端補0.

c=a>>n;

(3)使b與c按位或運算,得到最終結果

C語言預處理之條件編譯

這是stdio.h的頭幾行 if msc ver 1000 pragma once endif ifndef inc stdio define inc stdio if defined win32 defined mac error error only mac or win32 targets s...

C語言編譯預處理

title date br description c語言編譯預處理 2019 11 06 14 35 32 0800 預處理 c語言 c語言預處理是對源 進行初步轉換 碼農有道 c源程式 編譯預處理 編譯 優化程式 匯程式設計序 鏈結程式 可執行檔案其中編譯預處理階段,讀取c源程式,對其中的預處理...

C語言基礎 預處理

預處理 1.c語言在對源程式進行編譯之前,會先對一些特殊的預處理指令作解釋 比如之前使用的 include檔案包含指令 產生乙個新的源程式 這個過程稱為編譯預處理 之後再進行通常的編譯 2.為了區分預處理指令和一般的c語句,所有預處理指令都以符號 開頭,並且結尾不用分號 3.預處理指令可以出現在程式...