按位取否
short是16位吧,无符号的short的10的二进制应该是0000000000001010
~10就是1111111111110101
再转回10进制就是65525
应该是这样吗?
~A 是取反的意思
你那个语句就是打印 A 的反
按位取反运算符
(~)
按位取反运算是单目运算,用来求一个位串信息按位的反,即哪些为0的位,结果是
1,而哪些为1的位,结果是0。例如, ~7的结果为0xfff8。
取反运算常用来生成与系统实现无关的常数。如要将变量x最低6位置
成0,其余位不变,可用代码x = x & ~077实现。以上代码与整数x用2个字节还是用4个字节实现无关。
当两个长度不
同的数据进行位运算时(例如long型数据与int型数据),将两个运算分量的右端对齐进行位运算。如果短的数为正数,高位用0补满;如果短的数为负数,
高位用1补满。如果短的为无符号整数,则高位总是用0补满。
位运算用来对位串信息进行运算,得到位串信息结果。如以下代码能取下整型变
量k的位串信息的最右边为1的信息位:((k-1)^k) & k。
unsigned short A=10;等价于unsigned short int A=10;A具体的长度取决于编译器和机器,一般来说是
16位的,所以A的内部表示是0000 0000 0000 1010,~是一个一元位操作符,按位取反的意思,那么~A就
是1111 1111 1111 0101。一元位操作符仅此一种,还有另外五种二元位操作符,&(位与),|(位或),^(
异或),<<(左移),>>(右移)。第二行代码就是要打印~A的值,注意到这是一个unsigned值,所以只表示
正数,直接算有点麻烦,因为0xffff就是65535,从0101到1111是差10个数(15-5=10),所以65535-
10=65525为所求。
参合一下,接点分,呵呵