為什麼這篇unsigned char範圍鄉民發文收入到精華區:因為在unsigned char範圍這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者Favonia (小西風最乖了*^^*)看板C_and_CPP標題Re: [問題] signed...
補充一些版友沒有提到的...
※ 引述《DRLai (蘇打)》之銘言:
: 想請教關於 signed char 以及 unsigned char 使用時機
: google 了一下,似乎有寫到 signed / unsigned char 差在數值範圍
: (signed char = -128~127, unsigned char = 0~255)
這個範圍可能是錯的。要知道範圍,務必查下面四個常數
SCHAR_MAX
SCHAR_MIN
UCHAR_MAX
USHRT_MAX
或是你系統 ABI 的文件。這些數字都沒有標準答案。SCHAR_MIN 甚至
可能只有 -127.
: → azureblaze:char是signed 還是unsigned視編譯器而定,標準沒規定 08/29 19:45
: → azureblaze:gcc和msvc預設都是signed的樣子 08/29 19:46
: → azureblaze:負數char就用在需要範圍是 -128~127的時候 08/29 19:49
: → azureblaze:char的用途不是只有字元而已 08/29 19:50
範圍不大對...
: → DRLai:可以把他想成是節省記憶體的方式嗎?short=2bytes char=1byte 08/29 19:57
通常可以,但請查你用的系統的 ABI. 雖然 C 很低階,但決定這些的
都不是 C 語言本身,而是 ABI! 如果只看語言本身,char 可以是 65536bits
都不違反標準。 short 也不一定真的比較大。一切都由 ABI 定死真正大小。
(對了,你也不能用 sizeof 知道 char 的大小,要看 CHAR_BIT, 因為 C
語言直接把 "byte" 定義為 char 的大小...)
: → cortex1234:signed char 和 unsigned char 轉型成 int 時就不同了 08/29 20:03
: → cortex1234:你可以把它理解成 int8_t 和 uint8_t 08/29 20:04
嚴格來說都不一樣... orz
: 推 xvid:其實就在大小之分 如果你的數值在-128~127也可以用s char 08/29 20:38
範圍不大對...
: 推 loveme00835:用型態描述值域。有的人數值只有真/偽也在用int,只 08/29 20:52
: 推 loveme00835:有0~10也在用int,那種 code 看到要吐血 08/29 20:52
用 char 不一定比較快,範圍也不一定比較小啊!如果要速度應該要用
int_fast8_t 才對(如果有支援)。如果要限定範圍,只有 intX_t 之類才
是可靠的。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.39