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

2021-12-25 03:29:26 字數 3955 閱讀 5674

1樓:酷哥

因為有的資料比較長,比如1111111111111111,這樣用int就存不下了,要用長整型來儲存了

2樓:匿名使用者

可能強制轉換時要用到吧

這只是我的觀點

3樓:花舞葬月

long long hello = 1 + 2147483647;

cout << hello << endl;

cout << int_max << endl;

hello右邊表示式 是1 + int 最大值。 因為右邊沒什麼信心表明是long long 型別參與計算,他們直接當做是int + int的計算,因此計算結果放入到的int型別的空間儲存;但是超過了int型別最大值, 所以右邊變數的int值變成負的int值 了,能後再賦值給 long long型別的hello。so.....

long long hello = 1ll + 2147483647;

cout << hello << endl;

cout << int_max << endl;

如果這樣呢,在計算右邊表示式編譯器知道 long long型別參與計算了,因此它把加的結果放到了long long空間中, 能後再賦值給long long型別的hello.

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

c語言資料型別問題

4樓:網海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作為序號的起始數),這樣的話,在一個指定的整數範圍內,負數就比正數多一個了。

5樓:水裡風

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

6樓:匿名使用者

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

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

7樓:匿名使用者

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

1 個0

2147483648個負數

明白了嗎.

8樓:匿名使用者

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

手機上執行效果如下圖:

9樓:

一個兩位的二進位制數,只能表達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只有一個編碼了,而且一個位元組能表達的數也增加了一個,帶來了很多好處——我們現在使用的就是這種!

10樓:匿名使用者

因為採用補碼的原因

假如只有兩位2進位制

00b = 0

01b = 1

11b = -1

10b = -2

11樓:迷一樣的我

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

12樓:

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

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

13樓:一口沒水的枯井

你是對的

不用聽"有人說"

"有人說"當成了你的y是int型了

因為 int/int 是int 4/3的結果是1而被除數和除數有一個是浮點數,結果就是浮點數了所以你是對的

c語言資料型別的一些問題。

14樓:匿名使用者

是這樣的:

在你寫變數定義並且給出初始值時,編譯程式會收集這些初始值存放在一個特定的位置,以後程式載入執行時,首先開設變數,然後會從這個特定位置讀取資料為這些變數賦值。

當你寫3.14159f時,指定這個資料是單精度浮點數,那麼系統會自動在特定區存放一個單精度的浮點數;但你寫3.14159時,這個資料預設是雙精度的有可能被存放成雙精度的(要看編譯器情況),然後系統在賦給變數初始值時還要做一個雙精度到單精度的強制資料型別轉換。

同理123會佔用整型資料長度存放,123l保證這個整數存放成長型資料、佔用long int對應的位元組數。

15樓:匿名使用者

1、對於const float pi = 3.14159f;,字面常量3.14159被編譯器認為是double型別,而3.

14159f被認為是float型別字面常量,不加f會被警告的。意思是,高精度數轉換到低精度數時,會產生誤差。

2、而對於long int pi = 123l;,不加l或l不會被警告,編譯器會自動升格int型到long int型。低階別數轉換到高階別時,不存在溢位等問題。

3、對於short int pi = 123l;,後面的l純屬多此一舉,閒的沒事的人才會玩這種無聊的遊戲。

16樓:匿名使用者

總結一下: 3.14159 常數預設為 double 型別, 就像 1 預設為 int 型別一樣, 從 double 向 float 轉換注意會有告警, 低精度轉換會丟資料,加上個 'f' 就是告訴編譯器這個常數是 float 型別的。

同理加l也是為顯式指定數字字面量的型別。short int pi=123l,確實和123的效果是一樣的

c語言資料型別如何轉換C語言資料型別如何轉換?

不是有強制型別 轉換嗎?強制型別轉換 強制型別轉換 當運算元的型別不同,而且不屬於基本資料型別時,經常需要強制型別轉換,將運算元轉化為所需要的型別。強制型別轉換具有兩種形式,稱為顯式強制轉換和隱式強制型別轉換。1 顯式強制型別轉換 顯式強制型別轉換需要使用強制型別轉換運算子,格式如下 type 或 ...

c語言,如何檢測變數的資料型別,C語言,如何檢測變數的資料型別?

話說,你理解抄 錯了。型別的定義其實是為了讓人能更好的理解。對電腦來說,任何變數只有位元組大小的差異。我給你舉個例子,你就很好理解了 變數 a 在記憶體中用二進位制表示為 11111111111111111111111111111111 如果a 定義為int 則表示為 1,如果a定義為unsigne...

嵌入式c語言資料型別和標準c語言的資料型別是一樣的嗎,如果不一樣請舉例說明下謝謝

嵌入式c語言資料型別和標準c語言的資料型別是一樣的,都是ansic。但是使用方式有區別 嵌入式c語言資料 型別非常嚴格,對有符號無符號限定很嚴格,例如對資料很大時使用unsigned int等。這個的話要看你具體的環境了,一般都會有說明手冊的。不同的資料型別最終體現在每次分配的儲存空間不同。其實你如...