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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

C语言中的正负数及其输出

發布時間:2025/3/12 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中的正负数及其输出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在數學中,數字有正負之分。在C語言中也是一樣,short、int、long 都可以帶上正負號,示例

//負數 short a1 = -10; short a2 = -0x2dc9; //十六進制 //正數 int b1 = +10; int b2 = +0174; //八進制 int b3 = 22910; //負數和正數相加 long c = (-9) + (+12);

如果不帶正負號,默認就是正數。

符號也是數字的一部分,也要在內存中體現出來。符號只有正負兩種情況,用1位(Bit)就足以表示;C語言規定,把內存的最高位作為符號位。以 int 為例,它占用 32 位的內存,0~30 位表示數值,31 位表示正負號。

在編程語言中,計數往往是從0開始,例如字符串 "abc123",我們稱第 0 個字符是 a,第 1 個字符是 b,第 5 個字符是 3。這和我們平時從 1 開始計數的習慣不一樣,大家要慢慢適應,培養編程思維。

C語言規定,在符號位中,用 0 表示正數,用 1 表示負數。 int 類型的 -10 和 +16 在內存中的表示為:


short、int 和 long 類型默認都是帶符號位的,符號位以外的內存才是數值位。如果只考慮正數,那么各種類型能表示的數值范圍(取值范圍)就比原來小了一半。

但是在很多情況下,我們非常確定某個數字只能是正數,比如班級學生的人數、字符串的長度、內存地址等,這個時候符號位就是多余的了,就不如刪掉符號位,把所有的位都用來存儲數值,這樣能表示的數值范圍更大(大一倍)。

C語言允許我們這樣做,如果不希望設置符號位,可以在數據類型前面加上 unsigned 關鍵字。

示例

unsigned short a = 12; unsigned int b = 1002; unsigned long c = 9892320;

這樣,short、int、long 中就沒有符號位了,所有的位都用來表示數值,正數的取值范圍更大了。這也意味著,使用了 unsigned 后只能表示正數,不能再表示負數了。

如果將一個數字分為符號和數值兩部分,那么不加 unsigned 的數字稱為有符號數,能表示正數和負數,加了 unsigned 的數字稱為無符號數,只能表示正數。

注意,如果是unsigned int類型,那么可以省略 int ,只寫 unsigned,例如:

unsigned n = 100;

它等價于:

unsigned int n = 100;

無符號數的輸出

無符號數可以以八進制、十進制和十六進制的形式輸出,它們對應的格式控制符分別為:

嚴格來說,格式控制符和整數的符號是緊密相關的,具體就是:

%d 以十進制形式輸出有符號數;%u 以十進制形式輸出無符號數;%o 以八進制形式輸出無符號數;%x 以十六進制形式輸出無符號數。

那么,如何以八進制和十六進制形式輸出有符號數呢?很遺憾,printf 并不支持,也沒有對應的格式控制符。在實際開發中,也基本沒有“輸出負的八進制數或者十六進制數”這樣的需求,我想可能正是因為這一點,printf 才沒有提供對應的格式控制符。

不同類型的整數,以不同進制的形式輸出時對應的格式控制符(–表示沒有對應的格式控制符)。

之前我們也使用 %o 和 %x 來輸出有符號數了,為什么沒有發生錯誤呢?這是因為:
當以有符號數的形式輸出時,printf 會讀取數字所占用的內存,并把最高位作為符號位,把剩下的內存作為數值位;
當以無符號數的形式輸出時,printf 也會讀取數字所占用的內存,并把所有的內存都作為數值位對待。

對于一個有符號的正數,它的符號位是 0,當按照無符號數的形式讀取時,符號位就變成了數值位,但是該位恰好是 0 而不是 1,所以對數值不會產生影響,這就好比在一個數字前面加 0,有多少個 0 都不會影響數字的值。

如果對一個有符號的負數使用 %o 或者 %x 輸出,那么結果就會大相徑庭。

可以說,“有符號正數的最高位是 0”這個巧合才使得 %o 和 %x 輸出有符號數時不會出錯。

再次強調,不管是以 %o、%u、%x 輸出有符號數,還是以 %d 輸出無符號數,編譯器都不會報錯,只是對內存的解釋不同了。%o、%d、%u、%x 這些格式控制符不會關心數字在定義時到底是有符號的還是無符號的:
你讓我輸出無符號數,那我在讀取內存時就不區分符號位和數值位了,我會把所有的內存都看做數值位;
你讓我輸出有符號數,那我在讀取內存時會把最高位作為符號位,把剩下的內存作為數值位。

下面的代碼進行了全面的演示:

#include <stdio.h> int main() {short a = 0100; //八進制int b = -0x1; //十六進制long c = 720; //十進制unsigned short m = 0xffff; //十六進制unsigned int n = 0x80000000; //十六進制unsigned long p = 100; //十進制//以無符號的形式輸出有符號數printf("a=%#ho, b=%#x, c=%ld\n", a, b, c);//以有符號數的形式輸出無符號類型(只能以十進制形式輸出)printf("m=%hd, n=%d, p=%ld\n", m, n, p);return 0; }

運行結果:

a=0100, b=0xffffffff, c=720 m=-1, n=-2147483648, p=100

對于初學者來說,b、m、n 的輸出結果看起來非常奇怪,甚至不能理解。按照一般的推理,b、m、n 這三個整數在內存中的存儲形式分別是:

當以 %x 輸出 b 時,結果應該是 0x80000001;當以 %hd、%d 輸出 m、n 時,結果應該分別是 -7fff、-0。但是實際的輸出結果和我們推理的結果卻大相徑庭,這是為什么呢?
注意,-7fff 是十六進制形式。%d 本來應該輸出十進制,這里只是為了看起來方便,才改為十六進制。

其實這跟整數在內存中的存儲形式以及讀取方式有關。b 是一個有符號的負數,它在內存中并不是像上圖演示的那樣存儲,而是要經過一定的轉換才能寫入內存;m、n 的內存雖然沒有錯誤,但是當以 %d 輸出時,并不是原樣輸出,而是有一個逆向的轉換過程(和存儲時的轉換過程恰好相反)。

也就是說,整數在寫入內存之前可能會發生轉換,在讀取時也可能會發生轉換,而我們沒有考慮這種轉換,所以才會導致推理錯誤。

如果感覺不錯的話請點贊喲!!!

總結

以上是生活随笔為你收集整理的C语言中的正负数及其输出的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美日韩一区二区三区 | 欧美11p| 日韩av一区在线播放 | 久久一本综合 | 五月婷婷在线播放 | 中文国语毛片高清视频 | 亚洲AV无码精品一区二区三区 | 日韩深夜在线 | 国产91精品一区二区 | 国产精品腿扒开做爽爽爽挤奶网站 | 91丨porny丨在线中文 | 国产精品久久久久久久久久久久久久久久久久 | 国产一区二区亚洲 | 中文字幕av高清 | 少妇裸体性生交 | a级黄色录像 | 日本一区二区三区电影在线观看 | 日韩一区二区在线免费观看 | 日日干综合 | 国产精品免费视频观看 | 国产免费一区二区三区在线播放 | 国产喷水吹潮视频www | 色妞ww精品视频7777 | 国产精品一区在线观看 | 亚洲欧美日韩国产一区二区 | 91a视频| 久久精品99久久久久久 | 日本视频免费在线播放 | 久久婷婷五月综合色吧 | 国内视频一区二区三区 | 韩国国产在线 | 亚洲黄色a级片 | 亚洲图片一区二区三区 | 欧洲精品在线观看 | 欧美精品一区视频 | 五月开心激情 | 国产传媒中文字幕 | 欧美在线免费观看视频 | 精品国产999久久久免费 | 国产理伦| 久久免费毛片 | 欧美偷拍精品 | 自拍偷拍18p | 在办公室被c到呻吟的动态图 | 夜夜爽天天爽 | 日日日日日日bbbbbb | 黑人添美女bbb添高潮了 | 加勒比久久综合 | 伊人天天操 | 久草免费在线视频 | 国产精品无码专区av免费播放 | 精品1区2区3区 | 久久精品亚洲精品国产欧美 | 欧美极品jizzhd欧美仙踪林 | 日本三级大全 | 波兰性xxxxx极品hd | 成人欧美一区二区三区在线观看 | 日本美女视频网站 | 亚洲精品一区二区三区影院忠贞 | 一级美女视频 | 高清一区二区在线 | 玉女心经在线看 | 免费又黄又爽又色的视频 | 女人性做爰69片免费看 | 国产熟女一区二区三区四区 | 超碰在线免费看 | 欧美脚交 | 日一区二区三区 | 色噜| 国产在线精 | 国产精品亚洲视频 | 国产一区二区欧美日韩 | 欧美日韩免费在线视频 | japanese国产在线 | 久久久国产精品视频 | 欧美色图888| 国产一区二区综合 | 蜜桃一区二区 | 国内自拍网站 | 精品人妻伦一二三区久 | 精品国产av色一区二区深夜久久 | 亚洲狠狠婷婷综合久久久久图片 | 免费视频污 | 国产3p露脸普通话对白 | 欧美裸体xxx | 亚洲欧美韩国 | 欧美色图激情小说 | 欧美a性 | 色xxxxx| 欧美一级黄 | 久久成人精品视频 | 欧美日韩在线视频 | 亚洲精品成人久久 | 亚洲精品日韩丝袜精品 | 天天射一射 | 久久久久久免费精品 | 亚洲天堂中文字幕 | 免费在线日韩av | 欧美一级免费在线 |