-
左移<<:
高位丟棄,低位補零??
實現2倍乘運算: 左移n位就是將數值*2的n次方
注意:如果數據類型為有符號型,由于高位丟棄,發生溢出
查看全部 -
異或:兩者相斥才為1
符號:^
應用:
按位反轉:a^0xFF
實現數值交換:a=a^b;b=b^a,a=a^b
查看全部 -
16進制數0xFF=1111 1111=255
查看全部 -
按位與判斷奇偶性:
a為偶數:a&1 == 0
a為奇數:a&1 != 0
查看全部 -
位 0 false 1 true
&按位與,整型或字符型,補碼
a=4;00000000000000000000000000000100
b=7;00000000000000000000000000000111
a&b=00000000000000000000000000000100=4
迅速清零a&0=0
查看全部 -
malloc分配內存塊的函數
sizeof判斷數據類型的長度符
查看全部 -
共用體:
1、不同數據類型的變量共享一個內存地址
2、該結構體所占實際內存為最大的成員所占
3、關鍵字union
union data{
..
..
}
union data data_1
查看全部 -
如何對結構體進行初始化和訪問結構體成員:
1、初始化 在花括號內 對結構體內變量成員依次賦值即可
struct weapon weapon_1 = {"w_name",100,200};
2、訪問結構體成員:使用運算符.
:weapon_1.name,weapon_1.price//根據初始化的內容,=200
結構體數組:struct weapon weapon_2[2];
初始化就依次就好了:
查看全部 -
結構體:
寫在 main()函數之前
結構體是不同類型變量的集合(與數組很不同)
例子:
寫一個武器的結構體類型
首先使用關鍵字struct?
struct weapon{
????char name[20];
????int atk;
????int price;
};
在int main(){中使用這個數據類型
struct weapon 變量名;
如果要使用結構體數據類型作為全局變量,可在寫struct的時候在}后寫變量名然后;。
比如:
struct weapon{
????char name[20];
????int atk;
????int price;
}weapon1;
查看全部 -
typedef 與#define作用域不同:
#define如果寫到了自定義函數里面,在這函數外面還是可以使用的
但typedef就不行了。
查看全部 -
定義 結構體
struct stu{
}
在使用這個結構體的時候麻煩
:struct stu xxx;
所以常常這樣寫
typedef struct stu{
}stu_t;
之后通過 stu_t xxx;創建結構體
查看全部 -
與宏相近的語法:typedef(type define)?
作用:給變量類型起別名,當你感覺某變量名別扭,甚至數據類型名別扭時。。經常用在給自定義的數據類型起名字
比如數據類型size_t實際是系統用typedef語法處理了
typedef unsigned long size_t
注意:宏#define 眼里是沒有C語法的,所以不以分號結尾。
但typedef是C 需要以;結尾
注意:typedef int *p意義是:int *=p,所以p q=指針q
區別:在經過預處理后 typedef起的別名是不會替換回去的
查看全部 -
預處理過程其實還有一個條件編譯的功能:可以根據不同的條件,編譯不同的程序部分從而產生不同的目標代碼文件,對程序的移植和調試很有用
查看全部 -
注意:
1、宏定義是完全字符串替換 所以這里 a+b加個()。防止一些意想不到的錯誤。
2、但也有好處 :都是實現求和,定義函數求和對變量的數據類型只能與寫函數的時候保持一致,而宏定義實現求和沒有這個.
查看全部 -
宏也有函數形式,可以有參數,參數可以是代碼里面定義的變量 :
#include<stdio.h>
#define R 20
#define N(n) n*10
int main(){
?????int a=R;
???? int b=N(a)//打印b 會發現b=20*10=200
查看全部
舉報