1.計算機裡面所有資料是按照補碼表示的,就是說比如16位的-1,計算機裡面用補碼表示成11111111,11111111
(補碼的計算是:正數不變,是多少就儲存實際的值;負數的話,先變成正數,然後所有位取反(反碼),最後加1的補碼.如-1:(-)00000000,00000001 -> 00000000,00000001->11111111,11111110(反碼) ->11111111,11111111(補碼).
2.計算機裡面儲存的值都是補碼,取出來的時候,根據資料型別做不同的分析。比如,下面的程式,unsigned a:3,和int a:3是不一樣的,記憶體裡面值是:111的話,前者讀出來認為是7,後者讀出來就認為是-1.
#include
#include
#include
#include
#include
#include
#if 1
typedef struct node
node;
#else
typedef struct node
node;
#endif
int main()
struct和union的記憶體分配
struct struct結構體在分配記憶體時需要遵循記憶體對齊規則 1.結構體的起始儲存位置必須是能夠被該結構體中最大的資料型別所整除 2.前面單元的大小必須是後面單元大小的整數倍 每個資料成員儲存的起始位址必須是自身大小的整數倍 如果不夠就補齊 3.整個結構體的大小 即sizeof的結果 必須是...
Union和struct的記憶體分配區別
今天看到有一段程式裡在struct裡面用了個union,然後就突然想到了struct和union的區別,找了些資料後發現,struct和union在記憶體分配的時候有區別,union裡的資料是公用一塊記憶體 所以給其分配的記憶體總是union裡面所定義的最大型別長度的整數倍。而struct裡的資料跟...
C語言之struct結構體內存分配
實驗使用sizeof關鍵字測量結構體大小的規則 查資料得到的規則如下 原則1 資料成員對齊規則 結構 struct或聯合union 的資料成員,第乙個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小的整數倍開始 比如int在32位機為4位元組,則要從4的整數倍位址開始...