// 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;
}