计算器
HEX:16进制 DEC:10进制 OCT:8进制 BIN:2进制
BYTE:1字节8位 WORD:2字节16位
DWORD:4字节32位 QWORD:8字节64位
二进制相关概念
1.数据在内存硬件上以二进制形式存储
2.数据在软件上以十进制,八进制和十六进制存储
3.位(bit/bit位 简写b)
概念:计算机把内存中每个字节分成8段,每段只能记录0和1
1Byte = 8bit,1B = 8b
short a = 520;//本质是将520分拆成16个0和1存储到内存中
4.二进制:
概念:用一组0和1表示数字的方法简称二进制形式
例如:85(char类型) -> 01010101
5.二进制数每个bit位的编号从0开始
例如:前提是char类型
1字节存储
高位 低位
7 6 5 4 3 2 1 0 编号
0 1 0 1 0 1 0 1 二进制数
例如:前提是short类型
2字节存储,第1字节存储7~0这8位,第2字节存储15~8
6.二进制数中每个1单独代表一个十进制数,这个十进制数是2的编号次方
-例如:
7 6 5 4 3 2 1 0
0 1 0 0 0 0 0 0,其中第6位的1对应的十进制数字:2^6=64
7.二进制数中相邻的两个1,左边是右边的2倍
8.逢二进一
9.二进制的符号位
概念:
有符号类型的数字(不加unsigned修饰)才有符号,二进制数最左边的位叫符号位,通过此位可以确定数字的符号,符号位为0表示非负,符号位为1表示负数
例如:
01011010(前提是char类型),正数
11011010(前提是char类型),正数
10101010(unsigned char),正数
10101010(short类型)正数(高8位全是0,省略)
10111111 00011111(short),负数
01100000 11111111(前提是char类型),负数
进制转换:
二进制与十进制的转换
二进制表示的非负转十进制就是把二进制中的每个1单独转十进制然后相加即可
例如:
7 6 5 4 3 2 1 0 编号
0 1 0 1 0 1 0 1 unsigned char类型
10进制为:2^0+2^2+2^4+2^6 = 85'
十进制的非负转二进制
采用“除2取余,逆序排序”法:
具体做法:用2整除10进制正数,再用2去除商,会得到一个商和余数,如此进行,直到商小于1为止,
然后把先得到的余数作为2进制的低位
后得到的余数作为2进制的高位,依次排列
例如:
91/2 = 45 --- 1
45/2 = 22 ----1
22/2 = 11 -----0
11/2 = 5 -------1
5/2 = 4 ---------1
4/2 = 2 ---------0
2/2 = 1 ----------0
1/2 = 0 -----------1
所以91对应的二进制就是:01011011(不够8位时高位补0)
负数,符号位为1
-二转十:取反加一,转十添负(取反:1变0,0变1)
char类型
10100011取反01011100加一 01011101 转十 93 添负 -93
-十转二:去负转二,取反加一
-93 去负 93 转二 01011101 取反 10100010 加一 10100011
二进制与八进制转换
1.八进制概念:
将二进制数从右到左每三位分成一组,每组用0~7的数字替换得到8进制形式
2.字面值前缀:0,例如:0233
3.printf/scanf格式化占位符:%#o
例如:11 101 001 -> 0351
printf("%o\n",0520); //520
printf("%#o\n",0520); // 0520
二进制与十六进制的转换
十六进制概念:
1.把二进制从右到左每四位分为一组,每组用一个字母替换,用a~f替换10~15,0~9不用替换
2.字面值前缀:0x/0X,例如:0x233或者0X233
3.printf/scanf格式化占位符:%[#]x/X
例如:1100 0011 -> 0xc3
12 3
c 3
printf("%x\n", 0x520); //520
printf("%#x\n", 0x520); // 0x520
十六进制最好能背下来哦~~
数据的二进制存储形式
更多推荐
2.3 进制转换与运算符
发布评论