进制转换
十进制转二进制例子(转换为其它同理)
十进制 25
余数逆序11001
-
八进制转二进制
一位八进制换三位二进制
011---》1001
0101-->>1 000 001
-
二转八
1 100 100---》0144
-
十六进制转二进制
一位十六进制换四位二进制
0x1568--->1 0101 0110 1000
a | b | c | d | e | f |
10 | 11 | 12 | 13 | 14 | 15 |
0xab6--->1010 1011 0110
0xdef--->1101 1110 1111
-
二转十六
1 1001 0101---->>0x195
1 0110 1100----->>0x16c
原码反码补码
整数的二进制表示有3种:原码、反码、补码
整数在内存中存储是补码的二进制数
正数符号0 负数符号 1
正数原码反码补码一样,负数反码除符号位颠倒,补码为反码加1
正数5 | 负数-5 | |
原码 | 00000101 | 10000101 |
反码 | 00000101 | 11111010 |
补码 | 00000101 | 11111011 |
int a=2; int占4字节 1字节=8位 32位
int a=-6,b=11;
int c=a&b;
printf("%d\n",c);//10
解答:
先分别表示-6和11的补码:
-6原码:
1000 0000 0000 0000 0000 0000 0000 0110
-6反码:
1111 1111 1111 1111 1111 1111 1111 1001
-6补码:
1111 1111 1111 1111 1111 1111 1111 1010
11补码:
0000 0000 0000 0000 0000 0000 0000 1011
-6补码 & 11补码:
0000 0000 0000 0000 0000 0000 0000 1010==10
int a=5;
int b=~a;
printf("%d\n",b);//-6
解答:
5补码:
0000 0000 0000 0000 0000 0000 0000 0101
取反:
1111 1111 1111 1111 1111 1111 1111 1010
反码:
1111 1111 1111 1111 1111 1111 1111 1001
原码:
1000 0000 0000 0000 0000 0000 0000 0110==-6