计算器

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 进制转换与运算符