计算机内部都是使用二进制来表示数,每一位二进制数用一个二态元件保存,就像一个位置,移动位置就是位移了。一般有2种位移,向左——用“>>”后跟着位移数,例如100>>2;向右——用”<<”后跟着位移数,例如100<<2。
整数包括自然数和负整数,计算机中如何表示负数呢?目前一律采用最高位为1表示负整数。负整数的绝对值是负整数的补数(取反)加1。马上验证一下:
自然数左右移都是填充0;负整数左移填充0,右移填充1。
整数左移一位,结果是原数的两倍数,右移一位是除以2的商(地板整数)。马上验证一下:
二进制数太长,不利于人们读写,因此人们把二进制数按4位一个单元,每个单元用0到9和A到F表示每一个单元的值,就成了十六进制数,在输入时一般要使用前导“0x”。马上验证一下:
利用位移把多个整数打包到一个整数和从一个整数中解包出各个整数。最常见的应用就是颜色编码了。红黄蓝的颜色深度是0到255,用16进制表示0x00到0xFF,因此颜色可以用6位16进制数打包储存。下面是打包和解包过程:
注:移位之后用“& 0xFF”按位与操作提取所要的2位16进制数。
练习题:“爱”字的编号是45230,“中”字编号是54992,“国”的编号是47610,请用移位方法打包成一个整数表示“爱中国”。把三个数转为16进制编码(附录)后接在一起,前面加上“0x”,然后输入解释器看看和上一方法得到的数是否一致。
附录:十进制转十六进制
马上验证一下: