由于最近刷题时遇见了几道与位运算有关的题目,因此想借此机会把与位运算有关的知识点都整理一下。
要了解位运算,首先来整理一下二进制,二进制即用0和1两个数组及其组合表示任何数,二进制的进位规则是“逢二进一”,数字1在不同的位上代表不同的值,按从右至左的顺序,以2倍递增,二进制在计算机技术中广泛应用。
1.位
而每个二进制(即每个0或1)就被称为位,称为比特(bit),简记为b,是数据存储的最小单位,计算机中的CPU位数指的是CPU一次能处理的最大位数,如32位计算机的CPU一个机器周期内可以处理32位二进制数据的计算。
2.字节
字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位,也就是说一个字节用八个二进制(0或1)来表示。
3.字符与字节
字符是指计算机中使用的字母、数字、字和符号,是一种可以使用多种不同字符方案或代码页来表示的抽象实体。
其中有三种常用的字符方案:
ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制,最小-128,最大127。一个ASCII码就是一个字节。
UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节,中文标点占三个字节,英文标点占一个字节。
Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节,中文标点占两个字节,英文标点也占两个字节。
4.无符号数和有符号数
有符号数:机器自己是识别不出来正负数的,因此需要进行规定,如规定“0”表示正数,“1”表示负数,并规定将其放在有效数字的前面,从而组成有符号数。
无符号数:无符号数是针对二进制来讲的,无符号的表示范围是非负数,所有的二进制数都代表数值。
5.原码、反码和补码
首先,计算机在运算时,是按照补码的方式来进行运算的,而补码又是什么呢?补码、反码和原码是针对有符号数而言的,而有符号数中的正数这三者都是一样的,对于负数来说,反码是原码的除符号位全部取反,而补码从字面上理解就行,就是反码之后再进行补充,补1,也就是说反码是原码除符号位外取反在加一。就比如按照八位二进制而言,4在计算机中是这样表示的:0000 0100;而-4应该表示为1111 11