一.进制
1.进制的表现
十进制:0,1,2,3,4,5,6,7,8,9
八进制:0,1,2,3,4,5,6,7,10,11
二进制:0,1,01,10,11
十六进制:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,11,12,13
2.定义不同进制的表示方法
十进制:int a = 10;
八进制:int a = 014;
二进制:int a = 0b1010;//或者0B1010
十六进制:int a = 0xc;//或者0Xc
3.printf的多种格式符
%a 浮点数、十六进制数字和p-记数法
%A 浮点数、十六进制数字和p-记法
%c 一个字符
%d 有符号十进制整数
%e 浮点数、e-记数法
%E 浮点数、E-记数法
%f 浮点数、十进制记数法
%g 根据数值不同自动选择%f或%e.
%G 根据数值不同自动选择%f或%e.
%i 有符号十进制数(与%d相同)
%o 无符号八进制整数
%p 指针
%s 字符串
%u 无符号十进制整数
%x 输出十六进制数字无符号十六进制整数
%X 输出十六进制数字的无符号十六进制整数
%% 打印一个百分号
%g 没有e格式,默认6位包括小数点前面的数,
%f 没有e格式,默认6位仅只小数点后面包含6位
%e 采用e格式,默认6位为转化后的小数点后面的6位
4.二进制与十进制的互换
二进制-->十进制:110011 = 1*2^0 +1*2^1+0*2^2+0*2^3+1*2^4+1*2^5
十进制-->二进制:9 = 8 + 1 = 2^3 + 2^0 = 1001
5.int类型的类型说明符
long long int = long int = long 8个字节 printf("%lld") printf("%ld")
int 4个字节 printf("%d")
short int = short 2个字节 printf("%d")
signed int = signed 有符号的整数型
unsigned int = unsigned 无符号的整数型 最高位不作为符号位
二.按位运算
1.按位与 &
只有两个对应二进制位均为1时,结果才为1,并且与二进制位为1做按位与运算,结果不变
1001
0101
——
0001
2.按位或 |
只要两个对应二进制位有一个为1,结果为1,否则为0
3.按位异或 ^
当两个二进制位不相同时,结果为1;相同数值异或,结果为0;与0进行异或,结果不变;a^b^a =a^a^b =b
4.按位取反 ~
按位取反运算会把数值的正负形改变
5.左移
——高位舍弃,低位补零
左移想当与数值的乘法,a<<n = a*2^n (但有可能导致正负形改变)
6.右移
a>>n = a/2^n
三.利用按位异或交换a , b 的值
#include<stdio.h>
int main()
{
int a = 10;
int b = 11;
a = a^b;
b = a^b;
a = a^b;
printf("a = %d, b = %d\n",a,b);
return 0;
}
第一次a = 10^11,b = 10^11^11 = 10 ,第二次a = 10^11^10 = 11,实现互换
四.利用按位与判断奇偶性
a & 1 = = 1 奇数,因为奇数的二进制最后一位为1,与1按位与运算结果不变
a & 1 = = 0 偶数,因为偶数的二进制最后一位为0,与1按位与运算结果不变