首页 新闻 会员 周边

求救 。 C语言问题

0
悬赏园豆:5 [已关闭问题]

unsigned short A = 10;
printf("~A = %u\n", ~A);

谁给我翻译下。那个~A是什么意思。

细细各位了。

njddbbdd的主页 njddbbdd | 初学一级 | 园豆:85
提问于:2010-04-21 13:39
< >
分享
其他回答(3)
0

按位取否

short是16位吧,无符号的short的10的二进制应该是0000000000001010

~10就是1111111111110101

再转回10进制就是65525

应该是这样吗?

Gray Zhang | 园豆:17610 (专家六级) | 2010-04-21 14:16
0

~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。

eaglet | 园豆:17139 (专家六级) | 2010-04-21 15:10
0

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为所求。

monkey.D.luffy | 园豆:205 (菜鸟二级) | 2010-04-21 18:25
0

参合一下,接点分,呵呵

钢的锅 | 园豆:10 (初学一级) | 2010-04-30 19:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册