负数位运算(&,^,|,~)
2023-12-27 16:05:09
本文讨论负数与负数之间,正数与负数之间位运算:
#include <stdio.h>
int main(){
int a=-3; //1000 0011
int b=-10;//1000 0101
int d=10; //0000 1010
printf("a&b=%d ",a&b); printf("a&d=%d\n",a&d);
printf("a^b=%d ",a^b); printf("a^d=%d\n",a^d);
printf("a|b=%d ",a|b); printf("a|d=%d\n",a|d);
printf("~a=%d ",~a); printf("~d=%d\n",~d);
return 0;
}
? ? ? ? ? ? ? ?原码? ? ? ? ? ?反码? ? ? ? ? 补码
a=-3:? 1000 0011, 1111 1100, 1111? 1101;
b=-10:1000 1010, 1111 0101, 1111? 0110;
d=10: 0000 1010, 0000 1010, 0000 1010;
计算机低层运算是补码的运算,所以先计算补码:
a&b:? ?1000 1100?,1111 0011,1111 0100; (-12)
a&d:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0000 1000;(8)?
a^b:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0000 1011; (11) 补码符号位为0,即与反码,补码相同了
a^d:? ?1000 1001, 1111 0110?,1111? 0111;(-9)
a|b:? ? 1000 0001 ,1111 1110, 1111 1111; (-1)
a|d:? ? 1000 0001, 1111 1110, 1111 1111; (-1)
~a:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??0000 0010;(2)
~d:? ? ?0000 1011,1111 0100?, 1111 0101;(11)
注:取反的时候符号位不变,运算的时候符号位要参与运算
?
文章来源:https://blog.csdn.net/weixin_46855342/article/details/135240275
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!