從新認識了不少的標識符,其實以前大多的代碼裏都有所體現,有少數沒有用過的,我着重的進行了記憶,而且實現了一些例題;ide
#include <stdio.h> int main() { int num = 0; //找出num中的二進制位中的1的個數 scanf("%d", &num); int i = 0; int count = 0; for (i = 0; i < 32; i++) { if (1 == ((num >> i) & 1)) count++; } printf("%d", count); return 0; }
以上表現了右移標識符的一種用法,右移標識符只是將數字對應的二進制位進行右移,左移標識符擇優算數左移和邏輯左移,編譯器中的是算術左移,會保留符號位,數據存儲的時候都是存爲補碼的形式,正數原碼等於補碼,負數的補碼等於原碼按位取反再加一。指針
struct Stu { char name[20]; int age; char id[20]; }; #include <stdio.h> int main() { struct Stu s1 = { "張三",20,"2020012111" }; printf("%s\n", s1.name); printf("%d\n", s1.age); printf("%s\n", s1.id); struct Stu* ps = &s1; printf("%s\n", (*ps).name); printf("%s\n", ps->name); //-> 結構體指針指向操做符 return 0; }
其中的指向地址的操做符明顯比直接用名稱打印方便多了。code
#include <stdio.h> int main() { char a = 127; char b = 3; char c = a + b; printf("%d\n", c); int x = 1; printf("%d\n", x + --x);//無心義的算式 return 0; }
在不一樣的編譯器中會有不一樣的結果編譯器
#include <stdio.h> int main() { int i = 1; int a = (++i) + (++i) + (++i); printf("%d %d\n", a, i); return 0; }
要經過操做符肯定惟一的計算路徑,那麼這個表達式纔是正確的。因此上面的代碼時錯誤的,在 Linux系統中的執行結果爲10it