c語言中各資料型別不能進行哪些運算?

2023-03-10 06:35:03 字數 5849 閱讀 6945

1樓:匿名使用者

首先,你得明白什麼是資料型別?我們知道資料在記憶體中儲存都是按照位元組為單位儲存的,如何來表示乙個整形或乙個字元型等等資料,這就要用到資料型別了,所以,所謂的資料型別,其實就是用來標識資料佔據幾個位元組等資訊引數的,系統資料型別很好理解,自定義的資料型別(如用struct或class來定義的),其實也是一樣的,它裡面包含了各個簡單資料型別的長度和位置。 其次,c++中的資料是「強型別」的,也就是說資料在進行賦值時,型別必須匹配才行,這很容易理解,如果兩個資料的在記憶體中的長度都不一致,又怎麼能賦值呢,即使長度一致,如果內部的小單位有偏移,其實也是不能賦值的,這就是資料型別要匹配的原因了,呵呵,例如:

struct;和int型其實長度是一致的,都是4個位元組,但其內部每個位元組表示的具體意義是不一樣的。 當然c++也提供了資料轉換的機制,自動轉換和強制轉換。c++的內部轉換是char/short->int/long/float->double,也就是說將乙個char值賦值給乙個int型的,不需要你做操作,系統會自動轉換,這樣的轉換時不會丟失資料的,但如果反過來,編譯器就會報錯了,原因很簡單,資料有可能丟失了,比如將乙個double型別的資料轉換為int型,就丟失了記憶體中一半的資料,當然如果丟失的那部分是無意義的,這是的強制轉換是有效的,如將int型的(-127,127)之間的資料轉換為char型是有效的。

資料在作為函式引數傳遞的時候,也必須匹配型別,原因很簡單,函式引數的傳遞是通過棧來完成的,如果引數型別不一致,會導致棧裡的資料紊亂,傳遞的引數錯位,而導致錯誤。例如你給pow求冪函式,原型是double pow(double d,int i);如果你傳入的引數是(int,int),這顯然在資料型別轉換下是可行的;但如果你傳的是(double,double)這時的第二個引數就編譯不通過,如果強制轉換,編譯通過,但資料有可能會丟失了。

2樓:匿名使用者

理論上所有資料型別之間都可以運算,包括所有運算。資料在記憶體都是以二進位制數字存在,不管是加減乘除,還是左移右移都沒問題。

3樓:匿名使用者

除了指標型別(陣列類),其他的基礎型別什麼運算都可以啊,就是算完後賦值型別要對。

c語言中不同資料型別的資料在運算時採用的規則有哪些?

4樓:匿名使用者

不同資料型別之bai

間的轉換。有du2種方式:隱式轉換和顯zhi式轉換dao。

隱式轉換指的是默。

專認做的一些轉換式,比如屬整形和實型做混合運算(這裡我說的運算是合法的運算,不會是取餘這樣對運算元有資料型別要求的運算),得到的結果是自動由精度低的或佔位數低的資料型別向高的資料型別做轉換,也就是上述問題得到的結果是實型。

顯示轉換:指的是使用強制型別轉換運算子來進行強制的結果型別轉換,這是人為的得到想要的型別的一種方法。

你所描述的不同資料型別的資料在運算時,採取的多是隱式轉換。

c語言中不同資料型別的資料在運算時採用的規則有哪些 5

5樓:匿名使用者

當然是相同大小資料的等位運算了,參見組合語言。

6樓:

這個在一般的c語言教程裡面都有介紹的 譚老大的教材裡面說的很清楚。

7樓:湯曼華袁秋

1、賦值運算中如果賦值號「=」兩邊的資料型別不同,賦值號右邊的型別轉換為左邊的型別,這種轉換是截斷型的轉換,不會四捨五入。

比如i是整型變數,則i=;結果i的值為2直接捨去。

#include

intmain()

測試結果為2.

c語言中,基本資料型別的數值範圍是怎麼計算出來的?

8樓:匿名使用者

假設int型別是8位的整形資料型別,正數是從(0000,0000)b到(0111,1111)b,二進位制1000,0000表示的是2^8,所以0111,1111則是1000,0000b-1所得,即2^8-1,這是正數的最大值,負數最高位是固定的為1,所以負數的時候從1000,0000(即為-0)到1111,1111(最高位是符號位,不參與運算)這個數,所以他的範圍是-2^8

9樓:匿名使用者

這個要看具體的系統和編譯器了 你可以寫一句sizeof(int);看看他返回多少位元組 按照你的資料應該是返回2 位元組=16byte 符號位佔用一位 之後就是2進製的計算了 15個2進製位能表示的最大整數是15位全1 即2的15次方-1 負數同理。

10樓:網友

你這裡對應的int是16位的,最高位是符號位,表示正負,還有15位用來表示數值,於是就有int的資料範圍是-2^15~(2^15-1)

2^15就是2的15次冪,也就是15個2相乘。int型別15位數值位,每位有0,12種狀態,全排列就是2^15,正負數全算上,就是其資料範圍了。

學習過的c語言程式的資料型別和運算子有哪些

11樓:匿名使用者

c的資料型別包括:整型、字元型、實型或浮點型(單精度和雙精度)、列舉型別、陣列型別、結構體型別、共用體型別、指標型別和空型別。

c語言的運算子包含的範圍很廣泛,共有34種運算子。c語言把括號、賦值、強制型別轉換等都作為運算子處理。

()、圓括號、方括號、指標、成員、邏輯非、自加、自減。

++ 單目運算子。

+、 sizeof、(cast)

* 、算術運算子。

+ 、算術運算子。

<< 位運算子。

< 、關係運算子。

== 關係運算符號。

& 位與。^ 位異或。

| 位或。&&邏輯與。

|| 邏輯或。

? 、條件運算子。

/= 賦值運算子。

= 、順序運算子望採納。

12樓:匿名使用者

我幫你捋順一下思路吧。

c基礎 主要包括以下幾6大方面。

資料型別。各種運算子。

三種控制結構(順序 選擇 迴圈)

函式陣列。指標我當初和你一樣,也是自學的,其實並不難,我看的是夏老師,講的挺簡明易懂的,特別適合我這樣0基礎的,上面說的這些就是講的主要內容。

c++有關資料型別的問題?

13樓:你看到我的小豬了嗎

對於c語言來說,其儲存資料的格式是按照其補碼的形式存放的,只不過正數的補碼等於其數字本身,因此,在剛開始,就要以補碼的角度來思考問題,且計算機內部預設為是有符號型別的數字。

對於16位的二進位制來說,其預設的有符號資料範圍是:—32768~~32767。

對於32767加1,可得32768,超出了有符號整型變數的數值範圍,32767在計算機中的儲存形式:0111 1111 1111 1111

令其加1:可得——》1000 0000 0000 0000

可以這樣想:32767和加1後得到的資料都是以補碼形式存放在記憶體中的,只不過32767這個正數的補碼與其原碼是一樣的,那麼加1後得到的1000 0000 0000 0000這個補碼與原碼一樣嗎?

因為是有符號數,所以最高位表示符號位,而加1後的最高位為1,因此,首先確定這個數是個負數,再確定其數值大小,按照原碼求補碼的反順序來求,因此,先對這個數減1,得——》0111 1111 1111 1111,再取反,——1000 0000 0000 0000,這個原碼表示的大小是32768,又因為是負數,所以為-32768

望採納!

關於c語言運算問題

14樓:劉淘冬

x&1中&是按位與運算。

x是05,05的二進位制是00000101,1的二進位制是0001,位與的結果是00000001。即x&1的結果是1

&&是邏輯判斷運算。

如果&&兩邊的表示式的值都是非0,那麼運算結果就是1,只要兩邊有乙個值是0,那麼運算結果是0

很顯然x&1結果是1,z<'z'的值也是1,那麼1&&1,結果是1

故選擇b

c語言資料型別問題

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

16樓:水裡風

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

17樓:匿名使用者

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

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

18樓:匿名使用者

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

1 個02147483648個負數。

明白了嗎。

19樓:匿名使用者

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

手機上執行效果如下圖:

20樓:

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

C的基本資料型別包括哪些,C語言中基本資料型別包括哪些

語言包含5個基本資料copy 型別 void,int,float,double,和 char.c 定義了另外兩個基本資料型別 bool 和 wchar t.一些基本資料型別能夠被 signed,unsigned,short,和 long 修飾 所以short,long等等都不算基本資料型別。這是書上...

C語言中不同資料型別的混合運算,c語言不同資料型別間的混合運算

再回來說下,你可以這樣進行檢測,看隱式轉換的問題還是溢位的問題 typedef unsigned long long uint64 最新的編譯器都支援這種用法吧,總之你找個能表示64位的longlong就行了.uint cout uint64 iu uint i endl 這裡先將i轉換成uint型...

C語言中不同資料型別在記憶體中所佔據的位元組大小

型別 位元組 char 1short int 2int 2 tc 4 vc long 4float 4double 8long double 10 char 1個位元組 int 2個位元組 16位系統 4個位元組 32位系統 float 8個位元組 自定義型別注意記憶體對齊 printf d siz...