程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 數據類型,數據類型有哪些

數據類型,數據類型有哪些

編輯:關於C語言

數據類型,數據類型有哪些


整型的每一種都有無符號(unsigned)和有符號(signed)兩種類型(float和double總是帶符號的),在默認情況下聲明的整型變量都是有符號的類型(char有點特別),如果需聲明無符號類型的話就需要在類型前加上unsigned。無符號版本和有符號版本的區別就是無符號類型能保存2倍於有符號類型的正整數數據,比如16位系統中一個int能存儲的數據的范圍為-32768~32767,而unsigned能存儲的數據范圍則是0~65535。由於在計算機中,整數是以補碼形式存放的。根據最高位的不同,如果是1,有符號數的話就是負數;如果是無符號數,則都解釋為正數。同時在相同位數的情況下,所能表達的整數范圍變大。另外,unsigned若省略後一個關鍵字,大多數編譯器都會認為是unsigned int。

----------------

數據類型 -- uint32_t 類型

  數據類型 -- uint32_t 類型

1>. 在寫程序時注意"無符號類型"的使用, 各種類型邊界值的情況.
如:
a> 當某個數據不可能為負數時我們一定要考慮用以下類型:
unsigned char, unsigned int, uint32_t, size_t, uint64_t, unsigned long int,
b> 當有些數據你不知道是正負時一定不要用"a>"中的類型, 不然他永遠也不可能為負.

c> 數據的邊界值要多注意, 如:
uint32_t    a, b, c;
uint64_t    m;

m = a * b + c;
在該運算中可能出現錯誤, "a*b"的類型可能超過uint32_t的最大值,這時一定不要忘了類型轉換.
m = ((uint64_t)a) * b + c;

2>. 在適當的時候要會自我定義數據類型.
我們都知道linux C開發中的常見擴展數據類型的定義有:uint8_t, uint16_t, uint32_t, uint64_t, size_t, ssize_t, off_t .... 他之所以要自己定義出數據類型是有道理的, 如: typdef unsigned int uint32_t; 表示uint32_t為32位無符號類型數據, 其實size_t也是32位無符號數據類型, 為什麼不直接寫"unsigned int"呢?
為了程序的可擴展性, 假如將來我們需要的數據大小變成了64bit時,我們只需要將typedef long long size_t就可以了, 不然我們可要修改好多好多的地方了.
這種設計我們同樣可以應用到自己的開發中來,當自己設計一個int類型保存某種數據時,但你又沒把握將來是不是要用long int時你可以引用一個自己定義的數據類型的啊!


stdint.h
-----------------------------
typedef unsigned int            uint32_t;


uint32_t.c
-----------------------------
#include <stdio.h>
#if 0      
#include <stdint.h>    // uint32_t
#endif     

typedef unsigned int       uint32_t;
typedef unsigned long long uint64_t;

int main()
{
uint32_t a;
a = 12;
printf("a = %x\n", a);
printf("sizeof(a) = %d\n", sizeof(a));

uint64_t b;
b = 12;
printf("b = %x\n", b);
printf("sizeof(b) = %d\n", sizeof(b));
}  

a = c
sizeof(a) = 4
b = c
sizeof(b) = 8

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved