1.二进制的位运算
位运算只有五种: 与(&) 或(||) 异或(^) 左移(<<) 右移(>>)
1.异或:相异为1,相同为0
2.左移:左边舍弃,右边补0
2.右移:右边舍弃,左边 正数补0,负数补10000 1010 << 2 = 0010 1000
1000 1010 << 3 = 0101 0000
0000 1010 >> 2 = 0000 0010
1000 1010 >> 3 = 1111 0001
2.各种进制的表示方法
在C语言里,整数有三种表示形式:十进制,八进制,十六进制。
1.十进制:除表示正负的符号外,以1~9开头,由0~9组成。如,128,+234,-278.2.八进制:以0开头,由0~7组成的数。如,0126,050000.3,十六进制:以0X或0x开头,由0~9,A~F或a~f 组成。如,0x12A,0x5a000.
在计算机资料中不同的数制的数的表述有约定:
二进制数加后缀B,八进制数加后缀Q,十进制数加后缀D,十六进制数加后缀H,其中十进制的后缀D可以省略(默认)比如:11B,11Q,11D,11H就分别是二进制数,八进制数,十进制数,十六进制数如果是 11 无后缀的数慢步默认为十进制数
3.计算机中整数的二进制存储
整数是4字节,一个字节八位,总共占32位
正数 1 ~ 2147483647 ,负数 -2147483648 ~ - 1
0000 0000 0000 0000 0000 0000 0000 0001 0x0000 0001 1
0111 1111 1111 1111 1111 1111 1111 1111 0x7FFF FFFF 2147483647(2^31-1)
0000 0000 0000 0000 0000 0000 0000 0000 0x0000 0000 0
1000 0000 0000 0000 0000 0000 0000 0000 0x8000 0000 -2147483648(-2^31)
1111 1111 1111 1111 1111 1111 1111 1111 0xFFFF FFFF -1
4.C++中输出八进制,十六进制和二进制
oct 八进制
dec 十进制
hex 十六进制
int n_max = 42; cout<<n_max<<endl; //42 cout<<hex<<n_max<<endl; //2a cout<<oct<<n_max<<endl; //52 cout<<(bitset<num>)n_max<<endl; //num 输出的位数 //0000 0000 0000 0000 0000 0000 0010 1010 //需头文件 #include<bitset>
5.求二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数。
如:1 1
0x7FFFFFFF (2147483647) 31
0x80000000(-2147483648) 1
0x7FFFFFFF (-1) 32
0 0
int NumberOf1(int n) { int count = 0; for(int i=0; i < 32; i++) { count += n%2; //-1%2 为 -1 n = n >> 1; } if(count<0) count = 0 - count; return count; }