进制:
十进制:0~9 123.4 = 110^2 + 210^1 + 310^0 + 410^-1 (10基数)
二进制:0~1 1010.1 = 12^3 + 02^2 + 12^1 + 02^0 + 1*2^-1
= 23+21+2^-1 = 10.5
在二进制中1表示有,0表示没有
11011.1 = 24+23+21+20+2^-1=16+8+2+1+0.5=27.5
1011.1=11.5
按权展开求和
01011101011011110010111101011011-> 计算量太大
5d6F2f5b
64 0100 0000
1011 1111
-64 1100 0000
负数的二进制:其绝对值的二进制取反再加1
人使用十进制 计算机使用二进制 (矛盾不可调和)
01 011 101 011 011 110 010 111 101 011 011
1 3 5 3 3 6 2 7 5 3 3
八进制(了解,历史遗留问题):0~7 八进制 12->1*8^1 + 2*8^0 = 10
CPU (中央处理器) :32位/64位 都不能整除3
十六进制:(非常重要)0~9 a~f/A~F .重点注意a/A (10) ,用0x开头
二进制转十六进制: 4个二进制合并成1个十六进制
0101 1101 0110 1111 0010 1111 0101 1011
5 d 6 F 2 f 5 b
十六进制转十进制: 0x10->16 ; 0x123->1*16^2+2*16+3=256+32+3=291
十六进制转二进制:1个十六进制数字拆分为4个二进制 0x123->0001 0010 0011->100100011
1字节 =8个位 很重要
两个十六进制对于一个字节
十进制转二进制:基数除法
凑:50->110010; 70->1000110
十进制转十六进制: 十进制->二进制->十六进制
阿里巴巴笔试: 30!转成3进制末尾几个0? 1~30里面有多少3 14
提示1: 10!十进制末尾几个0? 考虑末尾怎么出现0? 2*5 ,5很少,计算5出现的次数 (5,10)
提示2: 30!十进制末尾几个0? 5,10,15,20,25,25,30
数据类型:
整数:(signed有符号 / unsigned无符号)char ,short, int ,long,long long 表示的数据范围不同
1 2 2/4 4 8
小数: float,double,long double
4 8 8不使用
char:有符号取值范围-128~127 ,无符号0~255
#include <stdio.h>
int main()//主函数,程序的入口,有且只要一个
{
for(char i=0;i<128;i++)//循环 死循环 i的取值范围-128~127 127+1->-128 ??
{
printf("%d\n",i);//输出i的值到屏幕
}
char a = 255; //笔试的重点
printf("%d\n",a);//-1
unsigned char b = -1;
printf("%d\n",b);//255
printf("%c,%d\n",'a','a');//'a'的编码值为97
short a = 1000;//2字节 0x03 E8
printf("hello world\n");//F1进入帮助手册
return 0;
}