02型別轉化 程序空間 陣列2015 08 26

2021-07-04 21:04:25 字數 2543 閱讀 7339

char a = -1;

int b = a;

b是-1

a的符號位是1,並且a是小變數,賦給int,是4個位元組的,大型別,按照低位元組對齊,前面進行符號位擴充

a的二進位制                                  1111

1111

b的二進位制 1111

1111

1111

1111

1111

1111

1111

1111

前面的1是符號擴充

int a = -256

char b = a;

b是0

按照低位元組對齊,如果大變數是大於char的,多的部分進行截斷,如果變數小於char,就可以

a的二進位制 1111

1111

1111

1111

1111

1111

0000

0000

b的二進位制 0000

0000

前面的1是符號擴充

truncate 截斷

整型提公升

在32位機中,所有位於低於32位的整型資料,在運算過程中先要轉化為32位的整型資料 ,然後才參與運算

浮點數沒有無符號型別的,也就是說沒有unsigned float型別。

轉化規則

if 有運算數是long double,那其他的數也都轉化成long double

else if 有運算數是double,那其他的數也都轉化成double

else if 有運算數是float,那其他的數也都轉化成float

else if 先把數進行整型提公升, 有運算數是unsigned long int,那其他的數都轉化成unsigned long int

else if 乙個數是long int,另乙個數是unsigned int,只要取決於unsigned int裡面的數能否被long ing包含,如果能夠包含,那就都轉成 long int,否則都轉成unsigned long int

else if 有乙個數是long int,都轉化成long int

else if 其中乙個數是unsigned int,另乙個數就轉成long int

else 兩個數都是int

>- 7%-3=1,因為餘數的概念是5/2=2····1;所以餘數應該滿足2*2+1等於被除數,所以7/-3=-2·····1,(-2)*(-3)+1才等於7

程序空間大致分為:系統空間,command args,stack,dynamic lib,heap,data,text

其中data裡面又分為uninit(未初始化)和init(初始化),init又分為rw(讀寫),ro(唯讀)

text存的是二進位制可執行的文字

int main(int args, char *argv)    //如果argv接收到的字串在command args裡面

void func(){}

void main()

上述程式壓棧的過程: 

作業系統執行狀態-->返回位址-->main()的引數-->mian()執行狀態-->返回位址-->func()的引數

a[10] = 不能理解為全部清零,而是把第乙個設定成0,剩餘的數自動清零

a[10] = ;把下標為4的元素設為20,其他數自動清零

[ ]:基址變址運算子

a[10] = ;

for(i = 0; i < 10; i++)

printf("%d\n", i[a]); //*(a+i) *(i+a) a是基址 i是變址

char *p = 0;

printf("%d\n", sizeof(p));

可以通過1級指標改變0級指標(變數)的內容

可以通過2級指標改變1級指標的指向

可以通過n級指標改變n-1級指標的指向

多維陣列都要轉化為1位陣列來理解

int a[2][3]; ====> int[3] a[2] ====>int[2][3]   a

printf("%p %p\n", a+0, a+1); // 相差12 int[3] a[2]

//a+1可以理解為 a[2]裡面有兩個int[3]型別的數,a是a[2]這個陣列的首元素位址,+1就是走了乙個元素型別的長度 就是12

printf("%p %p\n", &a, &a+1); // 相差24 int[2][3] a

//a的型別是int[2][3] 取位址&a 步長就是int[2][3]

繼承和類型別轉化

using system using system.collections.generic using system.linq using system.text namespace classstudy class person public int age public void sayhell...

linux批量kill 某一型別程序

為了清理之前的console consumer 採用如下的 指令碼 進行篩選,然後一次性kill掉 ps ef grep consoleconsumer awk xargs kill 9 這裡是輸出ps ef grep hello 結果的第二列的內容然後通過xargs傳遞給kill 9,其實第二列內...

C 隱式類型別轉化

隱式類型別轉換 可以用 單個形參來呼叫 的建構函式定義了從 形參型別 到 該類型別 的乙個隱式轉換 1 class person2 5bool issamename const person person 8private 9 string mname 10int mage 11 12int mai...