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