数据结构与算法:二进制与位运算初见

前言

众所周知,在计算机中,数据都是以二进制的形式存储的。而位运算就是直接对二进制数据进行操作的计算方式。

一、二进制

1.存储原理

计算机中,数据都是通过二进制存储的。如int类型,为4字节32位的二进制数,其中最高位为符号位,表示该数的正负,0为正1为负。

2.与十进制的换算

设i为二进制从低位第0位开始的数位,则二进制每位的权值为2的i次方。二进制转十进制,只需要让二进制的每一位数乘以该位权值的积相加即可。比如,0101,其十进制数为:0*2^3+1*2^2+0*2^1+1*2^0=5。

(一)无符号位

即最高位不用来表示正负而用来表示数值。比如,1111所表示的十进制数为15。此时,0000~1111所表示的范围为0~15十六个数。

(二)有符号位

当最高位用来表示正负时,0000~1111所表示的范围为-8~-1~0~7同样十六个数。所以,n位二进制数所表示的范围为-2^(n-1)~-1~0~2(n-1)共2^n个。

(1)非负数

非负数的换算只需保证最高位为0,其余位按以上规律换算即可。

(2)负数

换算负数时,首先将取负数的绝对值,并将其转为二进制,然后对其二进制数-1,之后将结果的每位数取反,得到负数的二进制。比如,-2,其绝对值2的二进制为0010,-1后为0001,取反后1110即为-2的二进制。

此时注意,-8在转换时,其绝对值8由

你可能感兴趣的:(c++,算法)