按位运算符,参与运算的双方需要转化成各自的补码形式进行按位运算,一个正数的补码就是这个正数的二进制形式,如5的二进制形式为:101,如果用两个字节存放一个整数,则在存储单元中数据的形式:
0000 0000 0000 0101
如果是一个负数,则应先求出负数的补码。求负数的补码方法是:
1:先将此数转化为其绝对值得的二进制形式。
2:然后对其后面所有各位按位取反、
3:最后加1
例如-5 补码的求法(以两字节存放一个整数为例):
0000 0000 0000 0101 绝对值5的二进制形式
1111 1111 1111 1010 所有位按位取反
1111 1111 1111 1011 再加一, (-5最终的补码形式)
在存放整数的存储单元中,最左面一位是用来表示符号位的,如果改为是0,则表示数值为整数;如果改位为1,则表示数值为负数。
二进制数的最末为是0代表这个数是偶数,1代表这个数是奇数。
如果给整型变量分配2个字节,则
存储单元中能存放的最大值为0111 1111 1111 1111 ,第一位0代表正数,后面15位全部是1,此数值位(2^15 - 1,下面有案例讲解),即十进制数32767。
存储单元中能存放的最小值为1000 0000 0000 0000 ,第一位1代表负数,怎么算数值?
倒退:
1000 0000 0000 0000-----------------负数的二进制补码形式
0111 1111 1111 1111 ----------------减1
1000 0000 0000 0000 -------------取反登出负数绝对值的二进制形式 2^15 --------32768
所以得出最小值为------- 32768
即二字节整数的取值方位为:(-(2^15)~~~~~~~2^15-1)(-32768 ------ 32767)
整型变量有符号,第一位是符号位。
无符号整型变量无符号,第一位也是数值位。
话说无符号两字节的整型变量的最大值是多少?
无符号两字节的最大值二进制应为: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
所有位累加结果就是最大值的数值: 2^15 + 2^14 + 2^13 ......................................+2^1+ 2^0
要算好久,换一种算法:将16位全1最后加1,而然后在进位0
得出17位二进制数:1 0000 0000 0000 0000