一.进位计数制
1.认识进制及其书写规范
1)十进制
<用字母D书写>
基数:0~9
2)二进制
<用字母B书写>
- 基数:0,1
- 位权:2^n
- c语言中不能直接用二进制
3)八进制
<用字母O书写>
- 基数:0~7,共八个
- 位权:8^n
- C代码的使用以数字0开头。例如:024
4)十六进制
<用字母H书写>
C代码的使用以0X开头,例如:0XF4
2.进制间的转化
1)十进制转二进制
1.一般方法
十进制转化为八进制,转换为十六进制;以此内推用除8法,除16法(我喜欢这个方法(❤ ω ❤))
整数部分<除2法> | 小数部分<乘2法> |
从下到上取余(取余数) | 从上到下取整(取小数点前的0或1) |
2.按位权
2)其它进制转十进制
按位权,Then相加
3)二进制与八进制转化
- 二进制中0与1的排列组合要想有8种,就是2^3种(占三个字节)———000(0),001(1),010(2),011(3),100(4),101(5),110(6),111(7)
- 可以在前面凑0,构成足够位数例如:001001001(B)=111(D)
4)二进制与十六进制转化
- 要想用二进制中的0和1表示16种,即2^4种(占用4个字节)———0000(0),0001(1),0010(2),0011(3),0100(4),0101(5),0110(6),0111(7),1000(8),1001(9),1010(10=A),1011 (11=B), 1100 (12=C), 1101( 13=D), 1110(14=E), 1111(15=F)
- 例如:67.c2(H)=0110 0111.1110 0010(B)
二.码制
1>码值之间的转化
1.要让计算机进行计算,得使用补码(计算机只能进行加法运算,所以非负数的原码,反码和补码都相同)
2.负数原码反码补码的转化
共8位,第一位是符号位。大小范围是-128~127.
2>按位取反(通过~运算符进行运算)
原来位置上的1变成0,原来的0变成1……
#include<stdio.h>
int main() {
int a = 3;
printf("%d", ~a);
//3: 0000 0011(补码)
//~a: 1111 1100(补码)=1111 1011(反码)=1000 0100(原码) —— -4
}
/*
#include<stdio.h>
int main() {
int a = -3;
printf("%d", ~a);
//-3: 1000 0011(原码)=1111 1100(反码)=1111 1101(补码)
//~a: 0000 0010(补码)(原码)
(注意,int a后,将a的原码转换为补码后才能运算)