C语言中取反的问题

C语言中取反的问题,第1张

我想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语言的取反运算符等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10167108.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存