亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

“ char”總是總是有8位嗎?

“ char”總是總是有8位嗎?

C
牛魔王的故事 2019-12-26 10:53:13
我一直認為:一個char由一個字節表示,一個字節總是可以指望有8位,這sizeof (char)始終是1,我可以分配的最大理論內存量(以chars為單位)是RAM的字節數(+交換空間)。但是,既然我已經閱讀了有關字節的Wikipedia條目,現在就不能確定了。我的假設中哪一個是錯誤的?哪個危險?
查看完整描述

3 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

  1. 是的,char而且byte是幾乎一樣的。字節是最小的可尋址內存量,charC中的a也是如此。 char始終具有大小1。

    根據規范,第3.6節:

    字節

    數據存儲的可尋址單元,其大小足以容納執行環境的基本字符集的任何成員

    3.7.1字符

    字符

    單字節字符
    <C>位表示形式,適合一個字節

  2. charCHAR_BIT位。它可以是任何數字(根據規范,可以是8或更大),但是肯定是最常見的8。但是,有一些真正的機器具有16位和32位char類型。 CHAR_BIT在中定義limits.h

    根據規范,第5.2.4.2.1<limits.h>的整數類型的大小

    以下給出的值應由適合在#if預處理指令中使用的常量表達式代替。此外,除了CHAR_BIT和之外MB_LEN_MAX,以下內容應替換為與根據整數提升轉換為相應類型的對象的表達式具有相同類型的表達式。其實現定義的值的大小(絕對值)應等于或大于所示的相同符號。

    —不是位字段的最小對象的位數(字節)
        CHAR_BIT                               8

  3. sizeof(char) == 1。總是。

    根據規范第6.5.3.4sizeof,操作員第3段:

    應用于類型為char,unsigned char或的操作數signed char(或其限定版本)時,結果為1。

  4. 您可以分配的內存與系統允許分配的內存一樣多-標準中沒有定義內存的多少。您可以想象,例如,一臺具有云存儲支持的內存分配系統的計算機-您可分配的內存實際上可能是無限的。

    這是完整的規范部分7.20.3.3 malloc函數

    概要

    1個 #include <stdlib.h>
       void *malloc(size_t size);

    描述

    2該malloc函數為大小由其指定size且值不確定的對象分配空間。

    退貨

    3該malloc函數返回空指針或指向分配空間的指針。

    這是整個規范的全部,因此您可以依靠的確實沒有任何限制。


查看完整回答
反對 回復 2019-12-26
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

sizeof(char)始終為1個字節。字節并不總是一個八位位組,但是:例如,德州儀器(TI)TI C55x是具有16位字節的DSP。


查看完整回答
反對 回復 2019-12-26
?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

sizeof(char)定義為始終為1。從C99:

當將其應用于具有char,unsigned char或signed char類型(或其限定版本)的操作數時,結果為1。

但是,不能保證為8位。實際上,在絕大多數平臺上都可以,但不可以,但從技術上講,您不能始終依靠這種方式(也不要緊,sizeof無論如何都應使用)。


查看完整回答
反對 回復 2019-12-26
  • 3 回答
  • 0 關注
  • 920 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號