我想a应该是字符型吧?
如
char
a=2;
那么a=00000010
(char
单字节)
对a取反
~a=11111101
因为char是无符号型。
那么对无符号数而言,11111101即是253
注意,取反是对整个数位取反,而不是对有效数位取反。
int在VC里是4字节,也就是32位,所以那30个高位的0被取反成1了,当然不是1。
要得到1,那把a与3做“与” *** 作,就把高位的30个位数全部清0了。
# include "stdioh"
main()
{int a;
a=2;
a=~a;
a=a&3;
printf("%d",a);
}
a=15=00000000000000000000000000001111
~a=1000=11111111111111111111111111110000
(计算机以补码存数据)正数补码是自身,负数补码是取反加一,11111111111111111111111111110000作为补码,对应原码100000000000000000000000001000,也就是-16
这要看你声明的k是什么类型了。若
k是char型,则b=~(k)=11110101,
k是short型,则b=~(k)=11111111
11110101,
k是int型,则b=~(k)=11111111
11111111
11111111
11110101。
至于它们是十进制的多少,那还得看你声明的变量k是有符号的还是无符号的。
scanf("%o",&a);
//8进制读取
b=a>>4;
//右移4位,a是无符号的,左边补0,
--->
2的4次方=16,
所以
相当于
b
=
a
/
16
c=~(~0<<4);
对0先按位取反,
得
-1,再左移4位,,
低位补0,
得
-16
(1111110000),
再取反,得
(0000001111),
即
15
d=b&c;
//按位与,
因为
c=15
的二进制只有低4位是1,
也就是把b的二进制只取低4位,
其余位全置0,
相当于
d
=
b
%
16
所以,
最后的结果相当于
d
=
a
/
16
%
16
printf("%o\n%o\n",a,d);
//
以8进制输出
以上就是关于C语言中取反的问题全部的内容,包括:C语言中取反的问题、C语言中的取反运算、C语言的取反运算符等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)