1.进制
(1)默认情况下,就是十进制
int number = 1010;
(2)二进制(ob或者oB开头)
int number2 = ob1010;
(3)八进制(0开头)
int number = 014;
(4)十六进制(0x或者0X开头)
int number = 哦、0xc;
十六进制里:a表示10 b表示11 c表示12 d表示13 e表示14 f表示15。
2.输出符号
(1)%d 十进制形式输出整数。
(2)%c 输出字符。
(3)%p 输出地址。
(4)%f 输出小数。
(5)%o 八进制形式输出整数。
(6)%x 十六进制形式输出整数。
3.进制之间转换
(1)二进制转十进制
0b1100 = 0*2的0次方 + 0*2的1次方 +1*2的2次方 +1*2的3次方 = 0 + 0 + 4 + 8 = 12。
(2)十进制转二进制
67 = 64 + 2 + 1 = 2的6次方 +2的1次方 + 2的0次方
= 0b100000 + 0b10 +0b1
= 0b100011
(3)N位二进制的取值范围
2位二进制的取值范围:0~2的2次方-1
2位二进制的取值范围:0~2的3次方-1
2位二进制的取值范围:0~2的n次方-1
4.signed和unsigned的区别
signed 最高位要当做符号位(默认情况下最高位就是符号位)。
unsigned 最高位不要当作符号位, 输出是用%u。
5.按位与 &
例:1001
0101
0001
printf(“%d\n”, 9 & 5);
只有对应的两个二进制位都为1时,结果才为1,否则为0。
6.按位或 |
例:1001
0101
1101
printf(“%d\n”, 9 | 5);
只要对应的两个二进制有一个为1时,结果就为1,否则为0。
7.按位异或 ^
例:1001
0101
1100
printf(“%d\n”, 9 ^ 5);
当对应的二进位相异(不相同)时,结果就为1,否则为0。
注意:
(1)相同的值进行异或,结果肯定是0,比如9^9 = =9
(2)交换 9^5^6 = = 9^6^5
(3)任何数值跟0惊醒异或,结果还是原来的数值,9^0 = = 9
(4)a^b^a = = a^a^b = = 0^b = = b
8.按位取反 ~
~0000 0000 0000 0000 0000 0000 0000 1001
1111 1111 1111 1111 1111 1111 1111 0110
全部取反 0变成1,1变成0.
printf(“%d\n”, ~9);
9.左移 <<
0000 0000 0000 0000 0000 0000 0000 1001
000 0000 0000 0000 0000 0000 0000 10010
9<<1 相当于 9*2的1次方 = = 18
9<<2 相当于 9*2的2次方 = = 72
9<<n 相当于 9*2的n次方
10.右移 >>
0000 0000 0000 0000 0000 0000 0000 1000
00000 0000 0000 0000 0000 0000 0000 100
8>>1 相当于 8/2的1次方 = = 4
8>>2 相当于 8/2的2次方 = = 2
8>>n 相当于 8/2的n次方
11.数值互换3种方法
(1)借助第三方
int temp = a ;
a = b;
b = temp;
(2)利用差值
a = b - a;
b = b - a;
a = b + a;
(3)利用换位异或
a = a ^ b;
b = a ^ b;
a = a ^ b;
|
|