// 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 ", 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(" "); // 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 ", 010);//%d是打印十进制数的占位符 // printf("0%o ", 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 ", 0x20); // printf("0x%x ", 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 ", sizeof(ch));//sizeof 运算符求变量或者常量占用的内存空间大小 // printf("short = %ld ", sizeof(short)); // printf("int = %ld ", sizeof(int)); // printf("long = %ld ", sizeof(long)); // printf("long long =%ld ", 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 ", a, b);//%d可以打印char short int 类型数据 //short max = 32767 min = -32768 short c = 0x7fff, d = 0x8000; printf("short max = %d min = %d ", c, d); // 2147483647 min = -2147483648 printf("int max = %d min = %d ", 0x7fffffff, 0x80000000); //long max = 9223372036854775807 min -9223372036854775808 printf("long max = %ld min %ld ", 0x7fffffffffffffff,0x8000000000000000);//%ld 打印long类型数据 long long l=132456; printf("long = %lld ", l);//%lld打印 long long 类型数据 //无符号号取值范围 unsigned int printf("max = %u min = %u ", 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 ", sizeof(float)); // printf("double = %ld ", sizeof(double)); // printf("long double = %ld ", 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 ", 2.345e2);//指数法 // printf("%f ", 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 ", f1); // // double f2 = 1.876543456789345678976543234567; // // printf("f2 = %.20f ",f2); // return 0; //} int main(int argc,const char *argv[]) { int num; scanf("%d",&num);//从标准输入文件中读取数据到内存中 stdin //fscanf(stdin, "%d", &num); printf("num = %d ",num); printf("hello world ");//把内容写入到标准输出文件中 stdout return 0; }