日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

整型数据存储

發布時間:2023/11/30 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 整型数据存储 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//代碼1 #include<stdio.h> int main() {char a = -1;signed char b = -1;unsigned char c = -1;printf("a = %d, b = %d, c = %d", a, b, c);return 0; }
???? 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<stdio.h> int main() {char a = -128;printf("%u\n", a);return 0; }
????-128對應的二進制比特為是1000 0000,當以%u的形式輸出的時候,先進行比特位按位提升,1111 1111 1111 1111 1111 1111 1000 0000,按照%u輸出就會成為一個特別大的數字
//代碼3 #include<stdio.h> int main() {char a = 128;printf("%u\n", a);return 0; }
????128對應的二進制比特位是1000 0000,它的類型是有符號char類型,輸出以%u輸出,此時先進行比特位提升1111 1111 1111 1111 1111 1111 1000 0000,而輸出是以%u輸出,此時應該是一個非常大的數

//代碼4 #include<stdio.h> int main() {int i = -20;unsigned int j = 10;printf("%d\n", i + j);return 0; }
????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<stdio.h> int main() {unsigned i;for (i = 9; i >= 0; i--){printf("%u\n", i);}return 0; }
???? 這里的i是一個無符號int型數據,所以在它的眼里所有的數據都是大于零的,所以程序自然會進入死循環中
//代碼6 #include<stdio.h> #include<string.h> int main() {char a[1000];int i;for (i = 0; i < 1000; i++){a[i] = -1 - i;}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個字符

//代碼7 #include<stdio.h> int main() {short num = 32767;short int a = num + 1;printf("%d", a);return 0; }

????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<stdio.h> unsigned char i = 0; int main() {for (i = 0; i <= 255; i++){printf("hello, world\n");}return 0; }
????i的類型是無符號char,范圍是0到255,所以死循環

總結

以上是生活随笔為你收集整理的整型数据存储的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。