1.原碼和補碼
例子
'6':原碼:0110; 補碼:0110
'-6':原碼:1110; 反碼:1001;補碼:1010 = 1001 + 1
(-6) + 6 = 0110 + 1010 = (1)0000 = 0;
當對補碼取補時,得到的是他的原碼;
2.編譯過程:
預編譯——>編譯(匯編語言)——>匯編(機器語言)——>鏈接
3.'chmod -R': 針對目錄,將目錄下的子目錄及文件的權限全部修改。
4. snprintf()和sprintf()的比較:snprintf()要求其第二個參數指定目標緩沖區的大小,可確保緩沖區不溢出。
5.32位UNIX系統的一般編程模型稱為ILP32模型,表示整數(I),長整數(L),和指針(P)都占用32位
數據類型 ILP32模型 LP64模型
char 8 8
short 16 16
int 32 32
long 32 64
pointer 32 64
6.對整型常數進行類型轉換的後綴有:u或U(unsigned)、l或L(long)、u/U與l/L的組合(如:ul、lu、 Lu等)。例:100u; -123u; 0x123l。
通過後綴L或l將整數強行存儲在long類型中。
所有的實數都是以double存儲。
7.常量在內存中的存儲方式:
1(0x0001): 在內存中以unsigned short(兩字節)存儲;
'1'(0x31): 一個字節;
"1": 字符串常量必須以'\0'來結束,占兩個字節。
8.scanf()輸入結束的條件:
a.遇空格,TAB,或回車
b.
c.遇非法字符
scanf()有返回值,成功返回"1",不成功"0"。
9.
a: for(i = 0; i < n; i++)
a[i] = 4;
b: for(p = a; p < a + n; p++)
*p = 4;
(a)以a為首地址,向前移動i個元素,每次賦值都要這樣做,"[]"是個運算符。
(b)每次都向後移一個單位就行了,(b)的效率明顯要高。
10.%f和%lf
(a):
<stdio.h>
int main()
{
int a, b, c;
double y;
a = scanf("%lf",&y);
printf("%d,%f,%lf\n",a,y,y); }
輸入1234567891234567890
輸出1,1234567891234567936.000000,1234567891234567936.000000
gdb:
Breakpoint 1, main () at 12_11_4.c:7
7 a = scanf("%lf",&y);
(gdb) s
12345678912345678912
8 printf("%d,%f,%lf\n",a,y,y);
(gdb) p y
$2 = 1.234567891234568e+19
(b):
#include <stdio.h>
int main()
{
int a, b, c;
double y;
a = scanf("%f",&y);
printf("%d,%f,%lf\n",a,y,y);
}
輸入123.11
輸出1,0.000000,0.000000
第二次輸出為什麼都是零呢?
看gdb調試:
Breakpoint 1, main () at 12_11_4.c:7
7 a = scanf("%f",&y);
(gdb) s
1234.123
8 printf("%d,%f,%lf\n",a,y,y);
(gdb) p y
$1 = 4.8545332934724682e-270
1234.123是被讀入成功的,但是存放格式是float。