IOS-C_Day2___進位編碼

來源:互聯網
上載者:User

標籤:

2015.1.20

//十進位

//0 1 2 3 4 5 6 7 8 9 10 11 12 .... 99 100 101 ...

//進位: "逢十進一"

 

//二進位(對於電腦是最自然的語言)

//0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111

//"逢2進1"

//高電平: 1 低電平 0

 

//5+6

//機器語言

//0101001010101010

//0101001010101001

//1010101010100110

 

//組合語言

//5+6

//movl $5 %-8(rbp)

//movl $6 %-12(rbp)

//movl %-8(rbp) %eax

//addl %-12(rbp) %eax

//movl %eax %esi

 

//可移植性差

 

//5+6 c99

//int a = 5;

//int b = 6;

//int c = a+b;

 

//簡潔 , 可移植性強, 健壯性

 

//編譯器:C語言 -- >  組合語言 --> 二進位語言

//OC語言 --> C語言 --> 組合語言 --> 二進位語言

 

 

//123 = 1*10^2 + 2*10^1 + 3*10^0

 

//除10倒序取餘數

//123  / 10 -- 3

//12   / 10 -- 2

//1    / 10 -- 1

 

//123

 

//十進位轉二進位

//除2倒序取餘數

//123

//123 / 2 -- 1

//61  / 2 -- 1

//30  / 2 -- 0

//15  / 2 -- 1

//7   / 2 -- 1

//3   / 2 -- 1

//1   / 2 -- 1

//0   / 2 -- 0

//0

//123 = 0b1111011 = 1 *2^0 + 1*2^1 + 0*2^2 + 1*2^3 + 1*2^4 + 1*2^5 + 1*2^6 = 1 + 2 + 0 + 8 + 16 + 32 + 64 = 123

 

//表示位元在資料的前面加0b  0b1010101001 0b11111

 

//345 678 987

 

/*int main(int argc,const char *argv[])

{

    int bin[32]={};

    int num;

    scanf("%d", &num);//小寫鍵盤Enter鍵不能使用

    //%d  整型資料格式化預留位置

    int i=0;

    while (num) {//num = 0

        bin[i]= num%2;

        num/=2;//改變num的值

        i++;

    }

    printf("0b");

    for (i=i-1; i>=0 ; i--) {

        printf("%d", bin[i]);

    }

    printf("\n");

    

    return 0;

}*/

 

//八進位

//0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 ...

//逢8進1

//八進位在前面加0表示八位元

//010

//資料的大小不因為進位的表現形式而改變

 

//int main(int argc, const char *argv[])

//{

//    int a = 10;

//    int b = 0b1010;

//    int c = 012;

//    int d = 0xa;

//    

//    printf("a = %d b = %d c = %d d = %d\n", a, b, c, d);

//

//    return 0;

//}

 

//十進位數轉八位元

//除8倒序取餘數

//123

//123  / 8 --- 3

//15   / 8 --- 7

//1    / 8 --- 1

//0

 

//123 = 0173 = 3*8^0 + 7*8^1 + 1*8^2 =  3 + 56 + 64 = 123

 

//233 156 78

 

//int main(int argc,const char *argv[])

//{

//    int num ;

//    scanf("%d", &num);

//    printf("0%o\n", num);//%o 八位元預留位置

//    return 0;

//}

 

//八進位轉二進位

 

//"421"

// 0     1     2      3      4      5       6      7

//000   001   010     011    100    101     110    111

//0173 = 0b1111011

//把八位元中每一位, 分別用三位位元替換

 

//04567    0765   01234

//0b100 101 110 111

//0b111 110 101

//0b001 010 011 100

 

//位元轉八位元

//0b 011 110 001 101 011 110 000 110

//036153606

//從低位開始, 每三位為一組, 高位不足三位補0, 用八位元替換三位位元

 

//十六進位

//逢十六進一

//0 1 2 3 4 5 6 7 8 9 a/A b/B c/C d/D e/E f/F

//10 11 12 13 .... 1f ...20 ...ff ...100 ...101

//首碼0x說明一個十六進位數 0x100

//十進位數轉十六進位數

//除十六倒序取餘數

//123

//123  / 16 -- b

//7    / 16 -- 7

//0

//123 = 0x7b = b*16^0 + 7*16^1 = 11+112 = 123;

 

//十六進位轉二進位

//分別用4位位元替換每一位十六進位數

//"8421"

//0      1    2     3     4    5     6     7     8

//0000 0001 0010   0011  0100  0101  0110  0111  1000

 

//9      a       b      c     d     e      f

//1001   1010   1011   1100   1101  1110  1111

 

//0x2345678 = 0b10001101000101011001111000

//0xfeabc9876543210 = 0b1111 1110 1010 1011 1100 1001 1000 0111 0110 0101 0100 0011 0010 0001 0000

 

//二進位轉十六進位

//從低位開始, 每四位為一組, 高位不足四位補0, 分別用十六進位數替換四位位元

//0b0101 1101 0110 1010 1111 0001 1110 1100

//0x5d6af1ec

 

//對於一個很大的數轉換成二進位,用八進位或者十六進位進行過度

//345678908765

 

//電腦中的單位

//電腦中最小的單位是二進位位 1bit

//八個二進位位 組成一個位元組 1Byte = 8bits

//1Kb = 1024Bytes

//1Mb = 1024Kb

//1Gb = 1024Mb

//1Tb = 1024Gb

//1Pb = 1024Tb

 

//硬碟廠商

//500Gb = 500*1000Mb = 500 * 1000Mb *1000Kb = 500 *1000Mb *1000Kb *1000Byte

 

//int main(int argc, const char * argv[]) {

//    

//    

//    printf("hello world\n");

//

//    return 0;

//}

 

//資料在電腦中儲存形式

//記憶體: RAM ROM

        //由二進位位電路組成

 

//資料編碼方式

//以8bits為例   char

//以最高位作為符號位, 其餘位表示資料的大小

//最高位為1 說明是一個負數, 最高位為0 說明是一個正數

 

//原碼: 最高位為符號位, 其餘位表示資料的絕對值大小

//-6 1000 0110

 

//6+5

//    00000110  6

//    00000101  5

//-------------------

//    00001011 = 11

 

//6+(-5)

//    0000 0110

//    1000 0101

//-----------------

//    1000 1011(原碼) = -11

 

//原碼不能進行減法運算, 原因是符號位也參與了運算

 

//反碼: 正數的反碼就是它的原碼, 負數的反碼,是在原碼的基礎上,符號位不變,其餘位按位取反

//7 原碼: 0000 0111 反碼: 0000 0111

//-7  原碼: 1000 0111 反碼: 1111 1000

 

//-5 原碼: 1000 0101 反碼; 1111 1010

//-9 原碼: 1000 1001 反碼: 1111 0110

//-12 原碼: 1000 1100   反碼: 1111 0011

 

//6+(-5)

//    0000 0110

//  + 1111 1010

//----------------

//    0000 0000(反碼) = 0

 

//-5+(-6)

//    1111 1010

//+   1111 1001

//-----------------

//    1111 0011(反碼) ==> 1000 1100  ==> -12

 

//反碼轉原碼: 再求一次反碼

 

//0 的表示不唯一

//+0  0000 0000

//-0  1000 0000

//反碼不能儲存資料的原因就是0的表示不唯一

 

//補碼: 正數的補碼就是它的原碼 負數的補碼,是在反碼的基礎上加1

 

//6 : 0000 0110(補碼)

//-6 : 1000 0110 --> 1111 1001 --> 1111 1010(補碼)

//-5 : 1000 0101 --> 1111 1010 --> 1111 1011(補碼)

 

// -6 + (-5)

//   1111 1010

//   1111 1011

//---------------

//   1111 0101(補碼) --> 1000 1010 --> 1000 1011(原碼) = -11

//補碼轉原碼: 正數不變, 對於負數, 符號位不變, 其餘位按位取反加1

 

//電腦中採用補碼的方式儲存資料

//-12 原碼: 1000 1100 反碼: 1111 0011 補碼: 1111 0100

//-34 原碼: 1010 0010 反碼: 1101 1101 補碼: 1101 1110

//-128 原碼: 11000 0000  反碼: 10111 1111 補碼: 1000 0000

//規定: 1後面跟7個0就是當前範圍內最小的數  1即表示符號位,又表示絕對值大小

//-127 原碼: 1111 1111  反碼: 1000 0000 補碼: 1000 0001

//-0 原碼: 1000 0000 反碼: 1111 1111 補碼: 0000 0000

//+0 0000 0000

//-128 ~~~ 127

//0x80 ~~ 0x7f

 

//16二進位位

//1000 0000 0000 0000   ~~~ 0111 1111 1111 1111

//0x8000  ~~~ 0x7fff

 

//資料類型

//整型

//有符號

 

//64位平台

//char     short      int       long       long long

//1byte    2bytes    4bytes     8bytes     8bytes

//32位平台

//1byte    2bytes     4bytes     4bytes    8bytes

 

 

//無符號

//unsigned char 0x00 ~~~ 0xff

//unsigned int   0x00000000 ~~~ 0xffffffff

//unsigned short  0x0000 ~~~ 0xffff

//unsigned long   0x0000000000000000 ~~~ 0xffffffffffffffff

//unsigned long long 0x0000000000000000 ~~~ 0xffffffffffffffff

 

/*int main(int argc, const char *argv[])

{

    //int a;

    printf("char = %lu\n", sizeof(char));//sizeof運算子 求資料類型,或者變數佔用記憶體空間大小

//    char a= 0x80, b = 0x7f;

//    printf("char %d ~~~ %d\n", a, b);

    

    printf("unsigned char = %ld\n", sizeof(unsigned char));

    //0 ~~ 255

//    unsigned char a= 0x00, b = 0xff;

//    printf("char %d ~~~ %d\n", a, b);

 

//    short a =0x8000, b = 0x7fff;

//    printf("short  %d ~~~ %d\n", a, b);

    

//    printf("short = %lu\n", sizeof(short));

//    int a = 0x80000000, b = 0x7fffffff;

   // printf("int %d ~~~ %d\n", a, b);

    

    printf("int = %lu\n", sizeof(int));

    

    long a= 0x8000000000000000, b= 0x7fffffffffffffff;

    printf("long %ld ~~~ %ld\n" , a, b);

    

    printf("long = %lu\n", sizeof(long));

    

    printf("long long = %lu\n", sizeof(long long));

    

    return 0;

}

*/

 

//%d : char short int

//%ld : long

//%lld: long long

//%u: unsigned char unsigned short unsigned int

//%lu: unsigned long

//%llu: unsigned long long

 

//%x: 列印十六進位

//%o: 列印八進位

 

 

//int main(int argc,const char *argv[])

//{

//    long long a=789;

//    printf("a = %lld", a);

//    

//    unsigned int b=12;

//    printf("%u", b);

//    

//    return 0;

//}

 

//浮點類型

//單精確度   雙精確度    長雙精確度

//float   double   long double

//4位元組    8位元組     16位元組

 

//int main(int argc, const char *argv[])

//{

//    printf("float = %lu\n", sizeof(float));

//    printf("double = %lu\n", sizeof(double));

//    printf("long double = %lu\n", sizeof(long double));

//    

//    return 0;

//}

 

//浮點類型資料表示

//3.14

//科學計數法: 5678.678 5.678678 * 10^3;(不能在電腦中表示)

//指數法: 34.56  ==> 3.456e1

//int main(int argc,const char *argv[])

//{

//    float f1 = 3.14;//常用方式

//    printf("%f\n", f1);

//    float f2 = 3.456e1;//指數法

//    printf("%f\n", f2);

//    float f3 = 3.45e-2;

//    printf("%f\n", f3);

//    

//    return 0;

//}

 

//浮點類型資料在記憶體中儲存形式

//3.145   --> 0.3145e1

//-32.56  -->-0.3256e2

//1.符號位 2.小數位 3. 指數位

//float 精度 6~7位

//double 精度 15~16位

 

int main(int argc,const char *argv[])

{

    float f1 = 567.2345434532345345;

    printf("%f\n", f1);//%f

    double f2 = 6798.34567876543234567876;

    printf("%.20f\n", f2);//%lf %f

    

    long double f3 = 34567.345678987654345678987654;

    printf("%Lf\n", f3);//%Lf

    

 

    return 0;

}

 

IOS-C_Day2___進位編碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.