关于位运算
发布网友
发布时间:2022-04-29 21:01
我来回答
共2个回答
热心网友
时间:2022-06-22 18:41
0100000 是一 8 进制常数, 表示成16 进制是 0x8000
也就是 unsigned short 的最高位为1
z= value & 0100000; //测试符号位 1 value 表示是 short型负数
//符号位为 0 则 value 表示 short型正数
该段程序是
首先 测试value的符号位
负数
返回 = 反码 + 1
正数
返回 = 原码
看来是求补码表示的数的绝对值
请参考百度百科
补码:
(1)正数的补码
与原码相同。 【例1】+9的补码是00001001。
(2)负数的补码
符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
(3).补码的绝对值(称为真值)
【例4】-65的补码是10111111 若直接将10111111转换成十进制,发现结果并不是-65,而是191。 事实上,在计算机内,如果是一个二进制数,其最左边的位是1,则我们可以判定它为负数,并且是用补码表示。 若要得到一个负二进制数的绝对值(称为真值),只要各位(包括符号位)取反,再加1,就得到真值。 如:二进制值:10111111(-65的补码) 各位取反:01000000 加1:01000001(+65的补码)
热心网友
时间:2022-06-22 18:41
如果value是0,z就是0,执行else
和0100000与就是为了判断正负数,一个正数与0100000肯定不是0100000,正数的补码就是自己。