c语言数据转移,重温C语言(2)之数据
一 數(shù)據(jù)類型
數(shù)據(jù)就是代表某些信息的數(shù)字和字符。
按計(jì)算機(jī)的儲(chǔ)存方式可分為兩大基本類型:整數(shù)類型和浮點(diǎn)數(shù)類型。
1 關(guān)鍵字
初始
C90
C99
int
signed
_Bool
long
void
_Complex
short
_Imaginary
unsigned
char
float
double
2 存儲(chǔ)單元
首先得記住,計(jì)算機(jī)內(nèi)部都是以二進(jìn)制進(jìn)行編碼的。
bit: 位,最小的存儲(chǔ)單元,可以儲(chǔ)存0或1。位是計(jì)算機(jī)內(nèi)存的基本構(gòu)成塊;
byte: 字節(jié),是常用的計(jì)算機(jī)存儲(chǔ)單位。對于幾乎所有的機(jī)器,1字節(jié)均為8位。
word:字,設(shè)計(jì)計(jì)算機(jī)時(shí)給定的自然存儲(chǔ)單元,對于8位計(jì)算機(jī)1字長只有8位。后來快速發(fā)展,已經(jīng)從8位、16位、32位、發(fā)展到現(xiàn)在的64位。計(jì)算機(jī)的字長越大,其數(shù)據(jù)轉(zhuǎn)移越快,允許的內(nèi)存訪問也更多。
3 整數(shù)
整數(shù)是沒有小數(shù)部分的數(shù)。計(jì)算機(jī)用二進(jìn)制數(shù)字存儲(chǔ)整數(shù)。例如數(shù)字7的二進(jìn)制存儲(chǔ)是00000111。
4 浮點(diǎn)數(shù)
有小數(shù)點(diǎn)的值就是浮點(diǎn)數(shù)。
因?yàn)樵谌魏螀^(qū)間內(nèi)(如,1.0到2.0之間)都存在無窮多個(gè)實(shí)數(shù),所以計(jì)算機(jī)的浮點(diǎn)數(shù)不能表示區(qū)間內(nèi)所有的值。浮點(diǎn)數(shù)通常只是實(shí)際值的近似值,比如,7.0可能被儲(chǔ)存為浮點(diǎn)值6.99999。
二 基本數(shù)據(jù)類型
int、long、short、unsigned、char、float、double、signed、_Bool、_Complex和_Imaginary。
1. int
有符號整型,可以是正整數(shù)、負(fù)整數(shù)或0。
一般而言,儲(chǔ)存一個(gè)int要占用一個(gè)機(jī)器字長。即16位計(jì)算機(jī)1個(gè)int值占16位(-32768~32768),32位計(jì)算機(jī)用32位存儲(chǔ)一個(gè)int值,64位計(jì)算機(jī)用32位存儲(chǔ)一個(gè)int值。
ISO C規(guī)定int的取值范圍最小為-32768~32767。
(1)進(jìn)制
相對于十進(jìn)制,我更喜歡八進(jìn)制和十六進(jìn)制。8和16都是2的冪次方,而10不是,通俗說八進(jìn)制和十六進(jìn)制記數(shù)系統(tǒng)在表達(dá)與計(jì)算機(jī)相關(guān)的值時(shí)很方便。例如16位中的十進(jìn)制65536用十六進(jìn)制表示是10000,十六進(jìn)制的每一位數(shù)由4位二進(jìn)制組成,例如5的二進(jìn)制是0101,6的二進(jìn)制是0110,因此十六進(jìn)制56的位組合是 01010110。
在C語言中,用特定的前綴表示使用哪種進(jìn)制。0x或0X前綴表示十六進(jìn)制值,所以十進(jìn)制數(shù)16表示成十六進(jìn)制是0x10或0X10。與此類似,0前綴表示八進(jìn)制。
下面代碼顯示了三種進(jìn)制:
#include
int main(){
int x = 73;
printf("十進(jìn)制 = %d,八進(jìn)制 = %o,十六進(jìn)制 = %x\n", x, x, x);
printf("十進(jìn)制 = %d,八進(jìn)制帶前綴 = %#o,十六進(jìn)制帶前綴 = %#x", x, x, x);
return 0;
}
(2)其他整數(shù)類型
short:有符號類型,占用的存儲(chǔ)空間可能比int類型少,常用于較小數(shù)值的場合以節(jié)省空間;
long:有符號類型,占用的存儲(chǔ)空間可能比int多,適用于較大數(shù)值的場合;
long long:有符號類型,占用的存儲(chǔ)空間可能比long多,適用于更大數(shù)值的場合,該類型至少占64位;
unsigned int:間寫 unsigned int, 無符號整型,只適用于非負(fù)值,用于表示正負(fù)號的位現(xiàn)在用于表示另一個(gè)二進(jìn)制位,所以無符號整型可以表示更大的數(shù),16位unsignedint允許的取值范圍是0~65535。
根據(jù)機(jī)型的不同,各種整數(shù)類型占用的空間也不同:
最早 short 16位,int 16位,long 32 位;
后來 short 16位, int 32位,long 32位;
現(xiàn)在使用了64位的處理器 short 16位, int 16或32位(根據(jù)計(jì)算機(jī)自然存儲(chǔ)單元定),long 32位, long long 64位。
溢出:表示值超出了該類型的代表范圍。比如當(dāng)類型的值達(dá)到最大值時(shí),二進(jìn)制存儲(chǔ)的所有位全是1即1111...111, 在加 1 的話就會(huì)造成溢出,所有為進(jìn)位變成了0,最高位的1超出了類型的二進(jìn)制位數(shù)就會(huì)被拋棄,所以最大值加1的結(jié)果就是變成了最小值。
unsigned short us = -1;
printf("%d\n", us); // 65535
2. char
用于存儲(chǔ)字符。計(jì)算機(jī)使用特定的整數(shù)來存儲(chǔ)特定的字符,所以 char 類型實(shí)際存儲(chǔ)的是整數(shù),在ASCII碼中,65代表A。
商用的統(tǒng)一碼(Unicode)創(chuàng)建了一個(gè)能表示世界范圍內(nèi)多種字符集的系統(tǒng),目前包含的字符已超過110000個(gè)。
C 語言定義char類型占用的位數(shù)是一個(gè)字節(jié)。
printf("%c\n", 65); // A
printf("%c\n", 'A'); // A
轉(zhuǎn)義序列
含義
\a
警報(bào)
\b
退格
\f
換頁
\n
換行
\r
回車
\t
水平制表符
\v
垂直制表符
3. _Bool
布爾值即true和false,c語言用1表示true,0表示false。技術(shù)層面是只占1位存儲(chǔ)空間的整數(shù)類型。
4. 可移植類型:stdint.h和inttypes.h
C99新增了兩個(gè)頭文件stdint.h和inttypes.h,以確保C語言的類型在各系統(tǒng)中的功能相同。
精確寬度整數(shù)類型(exactwidthintegertype):如int32_t表示整數(shù)類型的寬度正好是32位。
5. float, double, long double
printf("int 類型有 %d 字節(jié)\n", sizeof(int));
printf("char 類型有 %d 字節(jié)\n", sizeof(char));
printf("long 類型有 %d 字節(jié)\n", sizeof(long));
printf("long long 類型有 %d 字節(jié)\n", sizeof(long long));
printf("double 類型有 %d 字節(jié)\n", sizeof(double));
printf("long double 類型有 %d 字節(jié)\n", sizeof(long double));
printf("_Bool 類型有 %d 字節(jié)\n", sizeof(_Bool));
printf("float 類型有 %d 字節(jié)\n", sizeof(float));
int 類型有 4 字節(jié)
char 類型有 1 字節(jié)
long 類型有 8 字節(jié)
long long 類型有 8 字節(jié)
double 類型有 8 字節(jié)
long double 類型有 16 字節(jié)
_Bool 類型有 1 字節(jié)
float 類型有 4 字節(jié)
三 算法前瞻
/**
* 有一根27厘米的細(xì)木桿,
* 在第3厘米、7厘米、11厘米、17厘米、23厘米這五個(gè)位置上各有一只螞蟻。
* 木桿很細(xì),不能同時(shí)通過兩只螞蟻。開始時(shí),螞蟻的頭朝左還是朝右是任意的,
* 它們只會(huì)朝前走或調(diào)頭,但不會(huì)后退。當(dāng)任意兩只螞蟻碰頭時(shí),兩只螞蟻會(huì)同時(shí)調(diào)頭朝反方向走。
* 假設(shè)螞蟻們每秒鐘可以走一厘米的距離。編寫程序,求所有螞蟻都離開木桿的最短時(shí)間和最長時(shí)間。
*/
void antCode() {
int antSize = 5;
double nums[] = {3, 7, 11, 17, 23};
printf("sizeof(nums)=%d\n", antSize);
double lineSize = 27;
double max = 0;
double min = nums[0];
for (int i = 0; i < antSize; ++i) {
double left = nums[I];
double right = lineSize - nums[I];
printf("%d: left=%f, right=%f\n", i, left, right);
max = fmax(max, fmax(left, right));
min = fmax(min, fmin(left, right));
}
printf("max=%f; min = %f\n\n\n\n\n", max, min);
}
/**
* 找出符合如下條件的 9位數(shù):
* 這個(gè)數(shù)包括了 1 ~ 9這 9個(gè)數(shù)字。這個(gè) 9位數(shù)的前 n位都能被 n整除,若這個(gè)數(shù)表示為 abcdefghi,則 ab可以被 2整除, abc可以被 3整除…… abcdefghi可以被 9整除。
*/
void nineNumber(){
for (int i = 1; i < 10; ++i) {
nineNumberLogic(i, 2);
}
}
void nineNumberLogic(int a, int n){
if (n > 9) {
printf("%d\n", a);
return;
}
int first = a * 10;
// 這里可以判斷奇偶數(shù)來進(jìn)一步提高效率
for (int i = 1; i < 10; ++i) {
int b = first + I;
if (b % n == 0) {
nineNumberLogic(b, n + 1);
}
}
}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的c语言数据转移,重温C语言(2)之数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中卫治免疫性不孕最好的医院推荐
- 下一篇: android 中文api 在线测试,a