进制转换

//  main.c



//  进制转换



//



//  Created by zhangxueming on 15/5/26.



//  Copyright (c) 2015年 zhangxueming. All rights reserved.



//



 



#include <stdio.h>



//进制转换



//十进制: 0 1 2 3 4 5 6 7 8 9  10 11 ... 99 100...



//十进制是人类最自然的语言



 



//计算机



//二进制: 0 1



//有高低电平  约定高点平为 1 低电平为0



//10100101010



 



//5+6



//机器语言



//1010010101010



//1010101010010



//1010101010011



 



//5+6



//汇编语言



//movl $5 %rbp(-8)



//movl $6 %rbp(-12)



//movl %rbp(-8) %eax



//addl %rbp(-12) %eax



//movl %eax  %esi



 



//C语言



//int sum = 0;



//int a= 5;



//int b = 6;



//sum = a+b;



//简洁 执行效率高 健壮性强



 



//objective C  java  C++



 



//十进制转十进制



//123 = 123



//123 / 10 ---3 = 3*10^0



//12  / 10 ---2 = 2*10^1



//1   / 10 ---1 = 1*10^2



//0



 



//十进制: 0 1  2   3   4    5    6    7     8     9



//二进制: 0 1  10  11  100  101  110  111   1000  1001



 



//除2倒序取余数



//123



//123 / 2 ---> 1



//61  / 2 ---> 1



//30  / 2 ---> 0



//15  / 2 ---> 1



//7   / 2 ---> 1



//3   / 2 ---> 1



//1   / 2 ---> 1



//0



//0b是二进制数的前缀



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



 



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



//    printf("%d\n", 0b1111011);



//    return 0;



//}



 



//96 245 78



 



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



//{



//    int num;



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



//    int bin[32]={};



//    int i=0;



//    while (num) {



//        bin[i++]=num%2;



//        num/=2;



//    }



//    printf("0b");



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



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



//    }



//    printf("\n");



//    return 0;



//}



//二进制转十进制: 把每一位二进制代表的数值和相加



//0b110101 = 1*2^5 + 1*2^4 + 0 + 1*2^2 + 0 + 1 = 53



 



//八进制: 0 1 2 3 4 5 6 7



//"逢八进一"



//八进制前缀 0



//10  11 12 13 14 15 16 17 20  21 22 23 ... 77 100 ... 101



 



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



//{



//    printf("%d\n", 010);//%d是打印十进制数的占位符



//    printf("0%o\n", 14);//%o是打印八进制数的占位符



//    return 0;



//}



 



//八进制转二进制



//将八进制数的每一位分别用三位二进制数替换



//"421"



//  0   1   2   3   4   5   6   7



//  000 001 010 011 100 101 110 111



//016 = 0b1110



 



//二进制数转八进制数



//从低位开始每三位为一组, 高位不足三位补0, 每三位二进制数分别用一位八进制数替换



//0b 011 110 100 101 010 011 010 010 = 036452322



 



//十六机制数:



//"8421"



//0    1    2    3    4    5    6    7



//0000 0001 0010 0011 0100 0101 0110 0111



//8    9    a/A   b/B   c/C   d/D  e/E   f/F



//1000 1001 1010  1011  1100  1101 1110  1111



 



//"逢十六进一"



//十六进制转二进制



//0x是十六进制数的前缀



//分别用四位二进制数替换每一位十六进制数



//0x1ff = 0b111111111



//0xabc129 = 0b101010111100000100101001



 



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



//{



//    printf("%d\n", 0x20);



//    printf("0x%x\n", 120);//%x是打印十六进制数的占位符



//    



//    return 0;



//}



 



//二进制转十六进制



//方法: 从低位开始, 每四位为一组, 高位不足四位补0, 用分别用十六进制数替换每四位二进制数



//0b 0011 1011 1101 0011 1101 0100 0001 1010 = 0x3bd3d41a



 



//内存: 存储数据信息的地方



//RAM + ROM



//16G



//00000000  ~ 11111111



 



 



//bit(二进制位)



//1Byte(字节)  = 8bits



//1Kb  = 1024Bytes



//1Mb  = 1024Kbs



//1Gb  = 1024Mbs



//1Tb  = 1024Gbs



//1Pb  = 1024Tbs



 



//16G = 16*1024*1024*1024*8

 

 

//

//  main.c

//  数据编码

//

//  Created by zhangxueming on 15/5/26.

//  Copyright (c) 2015年 zhangxueming. All rights reserved.

//



#include <stdio.h>



//8bits = 1Byte

//最高位作为符号位, 高位为1,表示负数, 高位为0表示正数



//char类型 1字节

//5+6

//00000101

//00000110

//-6

//10000110

//原码:最高位为符号位, 其余位表示绝对值大小



//5+6

// 00000101

//+00000110

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

// 00001011(原码) == 11



//-5-6 <==> -5 + (-6)

// 10000101

//+10000110

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

// 00001011 =  11



//原码不能进行减法运算(可以进行加法运算), 符号位也参与了运算, 得到的值跟实际值不相等, 计算机不能以原码的方式存储数据





//反码:对于正数来说,它的反码就是它的原码,对于负数,符号位不变, 其余位按位取反

//6  原码: 00000110 反码: 00000110

//-5 原码: 10000101 反码: 11111010



//-8 -12 -20

//-8 反码: 11110111

//-12   : 11110011

//-20   : 11101011



//5-6

//-6 原码: 10000110 反码: 11111001

//   00000101

//  +11111001

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

//   11111110(反码)--> 10000001(原码)=-1

//反码转原码: 对反码再求一次反码



//-5 + (-6)

//-5: 原码: 10000101 反码:11111010

//-6  原码: 10000110 反码:11111001

// 11111010

//+11111001

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

// 11110011 (反码)-->10001100 =-12+1 = -11

//可以把进位1加到低位上去, 反码就能得到正确运算结果



//0的表示

//+0 00000000

//-0 10000000

//反码不用来存储数据, 因为0的表示不唯一



//补码

//正数的补码就是它的原码,对于负数, 在反码的基础上加1



//-5 补码:11111011

//-6 补码:11111010

//-9 -24 -7

//-9 : 11110111

//-24 : 11101000

//-7 : 11111001



//  11111011

// +11111010

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

//  11110101(补码)--> 10001011(原码)== -11

//补码转原码: 对补码在一次补码



//00000000



//10000000  = -128

//高位的1即表示符号又表示绝对值大小



//计算机采用补码的方式存储数据



//数据类型 + 变量名;



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

//    char ch = 100;

//    printf("%d",0b11111111);

//    return 0;

//}



//基本数据类型

//数据类型决定了变量或者常量占用的内存空间大小



//整型

//char  short  int  long   long long



//64位平台

//char = 1

//short = 2

//int = 4

//long = 8

//long long =8

//32位平台

//char  = 1

//short = 2

//int  = 4

//long = 4

//long long = 8



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

//{

//    char ch ;

//    printf("char = %ld\n", sizeof(ch));//sizeof 运算符求变量或者常量占用的内存空间大小

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

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

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

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

//    return 0;

//}



//数据类型的取值范围

//unsigned int  无符号整型数据



//注释代码 #if 0 ... #endif

#if 0

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

{

    //char max = 127 min = -128

    char a=0b01111111, b=0b10000000;

    printf("char max = %d min = %d\n", a, b);//%d可以打印char short int 类型数据

    

    //short max = 32767 min = -32768

    short c = 0x7fff, d = 0x8000;

    printf("short max = %d min = %d\n", c, d);

    

    // 2147483647 min = -2147483648

    printf("int max = %d min = %d\n", 0x7fffffff, 0x80000000);

    

    //long max = 9223372036854775807 min -9223372036854775808

    printf("long max = %ld min %ld\n", 0x7fffffffffffffff,0x8000000000000000);//%ld 打印long类型数据

    

    long long l=132456;

    printf("long = %lld\n", l);//%lld打印 long long 类型数据

    

    //无符号号取值范围 unsigned int

    

    printf("max = %u min = %u\n", 0xffffffff,0x00);

    //%u  unsigned char unsigned short unsigned int

    //%lu unsigned long

    //%llu unsigned long long

    return 0;

}

#endif



//浮点型(实型数据)

//float  double   long double

//float = 4

//double = 8

//long double = 16



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

//{

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

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

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

//    return 0;

//}



//浮点类型数据表示:

//1.常用方法:3.14   23.456789

//2.科学计数法: 234.5 == 2.345*10^2 (不适用计算机)

//3.指数法: 2.345e2



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

//{

//    printf("%f\n", 2.345e2);//指数法

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

//    return 0;

//}



//float 4字节

//234.5     + 0.2345e3

//符号位(1bit) + 小数位(23bits) + 指数位(8bits)

//

//float 精度 6~7

//double 精度 15~16



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

//{

//    float f1 = 3.23456789006545;

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

//

//    double f2 = 1.876543456789345678976543234567;

//    

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

//    return 0;

//}



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

{

    int num;

    scanf("%d",&num);//从标准输入文件中读取数据到内存中 stdin

    //fscanf(stdin, "%d", &num);

    

    printf("num = %d\n",num);

    

    printf("hello world\n");//把内容写入到标准输出文件中 stdout

    return 0;

}

 

你可能感兴趣的:(进制转换)