C基本資料型別

2021-08-19 19:25:37 字數 1576 閱讀 6597

c語言的基本資料型別有三種:

c語言的最早的基本資料型別就是這三。(後面還有c90,c99,c11剛更新的,以後再說)

今天的重點是結合實際來發現c語言基本資料型別的記憶體溢位問題。

首先,c語言在標頭檔案裡面定義了幾種資料型別的值範圍。

char

intshort

long

long long

schar_max

int_max

shrt_max

long_max

llong_max

schar_min

int_min

shrt_min

long_min

llong_min

uchar_max

uint_max

ushrt_max

ulong_max

ullong_max

cahr_max

char_min

在了解記憶體溢位問題前我們先補充一下計算機基礎知識---數字系統。

計算機是從自然界抽象出來的計算工具,所以我們需要將自然界的資料儲存到計算機上,它才能進行計算。所以人們就發明了二進位制儲存方式。(不要問我為什麼不用十進位制,因為在機器中用電流來表示0和1,頻率高的是1,低的是0,真的是為難喔乙個渣渣文科生了。而最早的計算機非常龐大,非常耗電,用十進位制電流很不穩定。先不說技術問題,當時的電還真的燒不起這十進位制的機器。真感興趣的可以去查資料。)

關於進製,喔預設為你知道了解,並能進行簡單運算。

那麼怎麼把資料存進去呢?

這二我們就得提到這世界上的10種人了,懂二進位制和不懂二進位制的。

1,原碼:就是用二進位制直接表示。(也就是unsigend數)

可是問題來了二進位制表示那負數怎麼表示呢?(比如-1,-2)

對就是將四位0000的最高位用來表示符號(0為正,1為負)

例如:0001(1) + 1001(-1) = 1010(-2)   不成立啊

0000 + 1000 =1000(-0)這完全不符合自然邏輯啊

可是原碼表示有符號數時存在乙個負零,這是與我們的初衷不負的。怎麼辦?

2,那就是反碼:將有符號數符號位不管,其他位反轉(0變1,1變0),正數的反碼就是它本身。

例子:0001 + 1110 = 1111 再進行取反運算就成了 1000,結果是對了,可是負零,你不覺得有什麼不妥嗎?

3,再來,補碼就是在反碼的基礎上加一。(同樣正數不進行處理)

(再一次感慨老大的聰明,說計算機不要天賦的,自己多揣摩吧!但是咱們也不能灰心啊)

例子:0001 + 1111 =11110  處理:去掉最高位,加一,取反——————0000就是0啊

好,終於把大象塞進冰箱了。該關門了。

這裡我們只討論整型的溢位問題。

#include #include //整型的記憶體溢位

int main(void)

看到了吧,int_max + 1 = int_min。

大家可以以時鐘來聯想這個溢位問題,一下就懂了。

十二點加一,指標不會指向十三點而是一點。

註解:c語言中int是預設的有符號型整數。(為了方便輸入嘛)

C 基本資料型別

型別識別符號 型別說明 長度 位元組 範圍備註 char字元型 1 128 127 27 27 1 unsigned char無符字元型 10 255 0 28 1 short int短整型 2 32768 32767 2 15 215 1 unsigned short int無符短整型 20 65...

C 基本資料型別

1.基本資料型別 程式中的變數都是先定義,後使用的。對變數的定義,可以包括三個方面 資料型別 儲存型別 作用域。所謂資料型別是按被定義變數的性質,表示形式,佔據儲存空間的多少,構造特點來劃分的。在c語言中,資料型別可分為 基本資料型別 構造資料型別,指標型別 空型別。基本型別 整型 字元型 實型 浮...

C 基本資料型別

型別別名位 允許的值 sbyte system.sbyte 8在 128 127 之間的整數 byte system.byte 8在 0 255 之間的整數 short system.int16 16在 32 768 32 767 之間的整數 ushort system.uint16 16在 0 6...