C語言資料型別問題,C語言資料型別小數精度問題 急

時間 2021-08-30 11:19:49

1樓:網海1書生

首先糾正一下,這不是無符號int,是有符號,符號位就是用來表示正負數的。

取值範圍的總數肯定是個偶數,這個好理解吧?那麼在這個數量範圍內,正數的個數和負數的個數肯定不可能相同啦,否則它們的和就是偶數,那麼你把0這個數往哪放?

你也可以這樣想:把偶數個數放到數軸上,處在最中間的肯定是兩個數,不管以哪個數作為原點,數軸兩邊的數肯定都不可能對稱啦!

如果以16進製制來表示,正數是從1到0x7fffffff(即1到2147483647),數量為2147483647個,負數是從0x80000000到0xffffffff(即-2147483648到-1),數量為2147483648個,再加上乙個0,總數就是4294967296(也就是2的32次方)

順便說說:你所謂的無符號int的取值範圍是0到4294967295,總數不也是4294967296嗎?

最後總結一下:問題的焦點就在於0既不是正數,也不是負數,所以在數軸上正數和負數的數量肯定不會是對等的,當然在實際應用中(或者說在傳統習慣上),通常是把0歸類到正數(比如說在大多數程式語言中都是把0作為序號的起始數),這樣的話,在乙個指定的整數範圍內,負數就比正數多乙個了。

2樓:水裡風

首位是符號位,0是正數,1就是負數,那麼這樣問題就來了,比方8位,00000000是0,那10000000不也是0嘛,只不過代表-0,這樣兩個二進位制表示乙個數不就浪費了。其實-0的那個我們按補碼處理一下,首先首位是1肯定是負數,還原回原碼也是10000000,所以他代表的值就是-2^7,這就是不對稱的那乙個,但是一共能表示的數的範圍肯定是偶數的;32位64位就同理了

3樓:匿名使用者

int型佔32位位元組,最大儲存數為2147483648 * 2,如果分正負則正負各2147483648。

但是在計算機內部,正數的二進位制首位是0,負數首位是1。0的二進位制表示首位就是0,因此把0也歸為正數一類。所以正數最大值的絕對值就比負數最小數的絕對值小1。

4樓:匿名使用者

大多數機器上乙個整數用4byte也就是32bit表示,總共可以表示2^32==4294967296個,無符號整數的範圍是[0,4294967295];對於有符號的整數,其實總數也是4294967296個2147483647 個正數

1 個0

2147483648個負數

明白了嗎.

5樓:匿名使用者

short短整型也是%d,long int長整型是%ld,單精度float是%f,雙精度double是%lf,字元char是%c,char字元陣列是%s,指標型別是%p等。下面上手機上用易歷知食軟體裡的微c程式設計來編寫個示例,手機上**如下圖:

手機上執行效果如下圖:

6樓:

乙個兩位的二進位制數,只能表達4個數,00、01、11、10。這4個數可以規定為對應的十進位制數為:-2(10)、-1(11)、0(00)、1(01),正負數總是在0兩邊的,所以肯定有0。

那麼這4個數怎麼安排也不會以0對稱了。但是可以有包括0的其他安排,比如-1(11)、0(00)、1(01)、2(10),這就要看哪種安排方便了。計算機的二進位製表數在發展過程中發現的時下的安排-2(10)、-1(11)、0(00)、1(01)方便實用,大家就這麼認可了,也作為一種編碼規則定下來了,所以我們後來人只能記住,沒有別的選擇了(除非發現了更好的安排)。

順便說一句,最早的二進位製表數安排還真是以0為界對稱的,不過0有兩個表達-0和+0,像char被安排為-127~-0+0~+127,-0的編碼是10000000。不久人們就發現這種安排很不方便,0要分正負處理但實質只是乙個值0,卻佔了兩個編碼,就把10000000這處數安排給了-128,這樣就不僅0只有乙個編碼了,而且乙個位元組能表達的數也增加了乙個,帶來了很多好處——我們現在使用的就是這種!

7樓:匿名使用者

因為採用補碼的原因

假如只有兩位2進製

00b = 0

01b = 1

11b = -1

10b = -2

8樓:迷一樣的我

你說的是32位有符號整形不是無符號,它能表示的數值範圍是2的32次方,是乙個偶數,然後中間乙個單獨的0,兩邊很本不可能對稱。

9樓:

那樣總數就是單數,2的次方永遠都是雙數

c語言資料型別小數精度問題!!!急

10樓:gta小雞

涉及到雙精度浮點數在記憶體中的實現過程。雙精度浮點數有三個部分,符號位、11位階碼、52位尾數。在做乘100之類的操作時,由於階碼增大,尾數要右移,會造成精度丟失。

簡單來說,此時記憶體中儲存的數字是9.9999999......,但輸出到螢幕上時,由於保留6位,顯示為10.

000000。而浮點數轉整數型別時只保留整數部分,因此9.999999......

強制型別轉換後等於9。

要解決這個問題,可以人工四捨五入,即輸出(long)(tem+0.5)的值

c語言資料型別問題

11樓:熟悉的陌生人

你這答案有點問題哦,前邊兩個元素是陣列,int和float都是四位元組,char是乙個位元組,總共(4+3)*4+16=44位元組,如果我算錯了你告訴我,我也學學

關於c語言的資料型別的問題

c語言中scanf語句問題以及資料型別的關係,詳細見問題補充。

12樓:逆光而行

事實上不應是scanf("%d",&x);而是scanf("%d\n",&x); 否則a[0]讀入的是回車符,即\n;

在用c語言編寫輸入語句的時候常用到scanf函式,初學者在剛用scanf函式輸入時,經常會遇到各種各樣的輸入錯誤,最重要的是一定要記住scanf函式的輸入格式,scanf函式裡包含了哪些東西,輸入的時候就必須有哪些東西,比如:scanf("%c%c%c"),那麼輸入的時候就必須連續輸入3個字元,中間不能有任何空格逗號或者回車符等分開,而如果是scanf("%c,%c,%c"),那麼輸入3個字元的時候中間就必須用乙個逗號分隔。

scanf函式最常用的兩種輸入方式%d整數輸入方式,以及%c字元輸入方式。

用%d方式輸入整數時,輸入一串數字然後按回車符,輸入就完成了。而用%c方式輸入字元時,就稍微複雜一點。一般來說用%c輸入字元時,當輸完以後,都習慣按一下回車,這時回車符就成了乙個問題。

【例1】:

scanf("%c",&a); /*此時輸入乙個字元,並按下回車,那麼變數a將會正確接收輸入的字元*/

scanf("%c",&b); /*但是變數b將會接收到回車符,其值為10,或者說ascii碼為10*/

【例2】:

scanf("%d",&x); /*此時輸入一串數字並回車,變數x將正常接收到輸入的整數*/

scanf("%d",&y); /*變數y不會接收到回車符,需要使用者繼續輸入數字,並回車,正常接收到整數*/

【例3】:

scanf("%d",&x); /*此時輸入一串數字並回車,變數x將正常接收到輸入的整數*/

scanf("%c",&a); /*但是變數a將會接收到回車符,其值為10,或者說ascii碼為10*/

【例4】:

scanf("%d",&x); /*此時輸入一串數字並回車,變數x將正常接收到輸入的整數*/

scanf("%d",&y); /*若此時輸入的是字母而不是數字,比如輸入「s」並回車*/

/*那麼變數y將不會接收到任何字元或數字,其值保持原樣,不發生任何改變*/

scanf("%c",&a); /*此時變數a將接收到上一步輸入的字母*/

/*即變數a中儲存的字元將是"s",而不是回車符*/

【結論】:

當輸入完整數或字元時,後面還需要輸入字元時,為了避免輸入的字元變成回車符,可以在輸入字元前多加一條scanf語句來吃掉前面的回車符。此時用來吃掉回車符的scanf輸入可以用%c方式,也可以用%d方式。當用%c方式來吃掉回車符時,回車符被讀進了char型別變數中,當用%d方式來吃掉回車符時,回車符並沒有被送進int型別變數中,而是在異常的字元輸入後,被自動清除了。

13樓:神速小羊

int 是定義整形的資料

float是定義單精度實數(想當於是小數)scanf就是輸入函式,用來接收鍵盤輸入的數字或者字元用法嘛,就是 int a=23;

float b=5.63;

scanf("%d%f",&a,&b);

這裡scanf函式,會把接收的a和b賦予到a和b相當於是實現了電腦和人之間的乙個交換。

14樓:匿名使用者

fflush(stdin);

用這個函式清除鍵盤緩衝區

c語言的三種基本資料型別是什麼?

15樓:蝴蝶蘭

c語言的三種基本資料型別為整型、實型、字元型。

1、整型。包括short、int、long等,用以表示乙個整數,預設為有符號型,配合unsigned關鍵字,可以表示為無符號型。

2、實型,即浮點型。包括float, double等,用來表示實數,相對於整型。

3、字元型,即char型。用來表示各種字元,與ascii碼表一一對應。

char 字元型,佔1個位元組

short 短整型,佔2個位元組

int 整型,佔4個位元組

long 長整型,佔4個位元組

float 單精度浮點型,佔4個位元組

double 雙精度浮點型,佔8個位元組

c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平台的特性,以乙個標準規格寫出的c語言程式可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平台。

c語言簡單資料型別有哪些?

16樓:哇哎西西

c語言的基本資料型別為:整型、字元型、實數型。

這些型別按其在計算機中的儲存方式可被分為兩個系列,即整數(integer)型別和浮點數(floating-point)型別。

這三種型別之下分別是:short、int、long、char、float、double 這六個關鍵字再加上兩個符號說明符signed和unsigned就基本表示了c語言的最常用的資料型別。

下面列出了在32位作業系統下 常見編譯器下的資料型別大小及表示的資料範圍:

17樓:勇素芹代雨

告訴計算機所要儲存運算的是什麼型別的數,例如你定義intm;

那麼printf實現不同的資料定義

基本型別有整形,實型(浮點型)分單精度型和雙再看看別人怎麼說的。

c語言的基本的資料型別,C語言 四種基本資料型別

c語言中只有 邏輯運算子 沒有邏輯型你估計是認為 邏輯型就是 布林型別吧 屬於邏輯型c語言中沒有 布林型別 布林型別 是c 中的 邏輯性指的是ture false,在c裡並沒有,c裡0代表false,其他的一切都代表true 沒有邏輯型別,但有邏輯運算 在昭顯廟寫歌的北冥雪 c語言沒有邏輯型,邏輯型...

c語言資料型別 不能進行 和 的型別是什麼?

貌似都可以。除了常量。c語言的常見資料型別到底有什麼區別 1 首先開啟虛擬機器,執行終端,建立檔案。2 然後開啟檔案,寫入程式,匯入標頭檔案,包括中的sizeof 函式。3 然後輸入gcc 進行編譯,輸入。執行程式。4 要想知道浮點型的資料的最大值和最小值,以及占用位元組數,引用標頭檔案。5 使用內...

易語言資料型別,易語言中的資料型別是什麼意思?求詳解,不需說明內容,謝謝!

deliciows丶 版本 2 區域性變數 文字,文字型 區域性變數 邏輯,邏輯型 區域性變數 日期,日期時間型 區域性變數 位元組,位元組型 區域性變數 整數,整數型 區域性變數 小數,小數型 區域性變數 短整數,短整數型 區域性變數 長整數,長整數型 區域性變數 雙精度小數,雙精度小數型 文字 ...