//**1
#include
int main()
1000 0000 0000 0001 -> -1原始碼
1111 1111 1111 1110 -> -1反碼
1111 1111 1111 1111 -> -1補碼
對於a,按位提公升,看的是當前位元位的型別,所以按位提公升將變為1111 1111 1111 1111 1111 1111 1111 1111,而輸出的時候先看型別和最高位,型別是有符號char,由於最高位是1,所以必須將此時的補碼1111 1111轉換為原始碼,在進行讀取,此時對應的原始碼是1000 0001,對應的二進位制數字是-1,對於b,輸出的和a是一樣的,這裡不在多說。而對於c來說,它對應的當前變數的型別是無符號char型別,而讀的時候是以%d的形式輸出,所以將1111 1111轉換為二進位制,對應的數字是255,所以輸出的結果如圖所示。
//**2
#include
int main()
-128對應的二進位制位元為是1000 0000,當以%u的形式輸出的時候,先進行位元位按位提公升,1111 1111 1111 1111 1111 1111 1000 0000,按照%u輸出就會成為乙個特別大的數字//**3
#include
int main()
128對應的二進位制位元位是1000 0000,它的型別是有符號char型別,輸出以%u輸出,此時先進行位元位提公升1111 1111 1111 1111 1111 1111 1000 0000,而輸出是以%u輸出,此時應該是乙個非常大的數
i對應的二進位制補碼是1111 1111 1111 1111 1111 1111 1110 1100 ,10是無符號整型,對應的二進位制是0000 0000 0000 0000 0000 0000 0000 1010,將i和j相加得到1111 1111 1111 1111 1111 1111 1111 0110,輸出是以%d的形式輸出,則將二進位制對應的補碼轉換為原碼是1000 0000 0000 0000 0000 0000 0000 1010,將其輸出對應的十進位制數是-10
//**5
#include
int main()
return
0;}
這裡的i是乙個無符號int型資料,所以在它的眼裡所有的資料都是大於零的,所以程式自然會進入死迴圈中//**6
#include
#include
int main()
printf("%d", strlen(a));
return
0;}
a[i]先是由-1到-128;當i變成128時此時-1-128賦值給a[i],而a[i]是乙個有符號char型別,此時-1和-128相加,在a[i]的眼裡將變成127, 繼續加則是126,直到0,則對應的字元有128 + 128 = 256,但是字串是以』\0』結尾,此時的0將不算入其中,則總共有255個字元
32767對應的二進位制原碼是0111 1111 1111 1111,當給其加1時變成 1000 0000 0000 0000,然後以%d輸出,先進行符號擴充套件,a是有符號短整型,符號擴充套件為1111 1111 1111 1111 1000 0000 0000 0000,而符號位是1,轉換為原碼是1000 0000 0000 0000 1000 0000 0000 0000,所以輸出是-32769
//**8
#include
unsigned
char i = 0;
int main()
return
0;}
i的型別是無符號char,範圍是0到255,所以死循 整型資料的儲存與讀取
資料在計算機中是以二進位制補碼的形式儲存的。不同的資料型別有不同的補碼形式。下面分別就資料型別和資料的存放 讀取討論。一.資料的型別 資料型別分為原生資料型別和自定義資料型別。1 原生資料型別 內建型別 包括我們常用的int char short long float double.說明 整型家族有...
整型資料在記憶體中如何儲存
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!以下討論,針對32位的計算機系統。問 int型資料佔幾個位元組?答 4位元組。地球上這個群體的人都知道。再問 這4個位元組,即32個二進位制位,又是何儲存?這就進入計算機的 底層 了。這個事情,學習程式設計的童鞋,可以懂。儲存的方式,和我們拍腦袋想...
(乾貨)詳解資料儲存(中) 整型
上一章節講解了進製,為下面的兩章做了乙個簡單的鋪墊,下面對整型的儲存模式進行詳解。計算機中的有符號整數有三種表示方法 原碼 反碼 補碼 無符號數和正數的原碼 反碼 補碼均相同 三種表示方法均有符號位和數值位兩部分,符號位中0為正,1為負,而數值位三種表示方法各不相同 原碼 直接將整型按照正負數的形式...