首页 > 编程知识 正文

c语言按位取反运算符,某一位取反c语言代码

时间:2023-05-05 06:39:06 阅读:268937 作者:3079

首先,在了解位运算取反之前,我们要先了解在内存中数据是怎么存储的。
在计算机系统中,数值一律用补码来表示和存储
什么是补码呢?

正整数的补码:是其二进制表示,与原码相同。eg:假设int 型变量为2字节,int a=10,那么a在内存中是按照原码进行存储的,也即0000 0000 0000 1010

负整数的补码:简单记四个字“变反加一”,什么意思呢,举个例子就明白了。int b=-10,想要知道变量b在内存中是怎样存储的
第一步:算10的原码 也即0000 0000 0000 1010
第二步:取反 1111 1111 1111 0101
第三步:加一 1111 1111 1111 0101+1=1111 1111 1111 0110即为-10的补码

好了,铺垫已完成,接下来进入正题
看程序!

#include <stdio.h>
void main(){
int a=10,b;
b=~a;
printf("%d",b);
}
结果为 -11

首先a 是正整数 a的补码就是其原码 0000 0000 0000 1010 (在内存中就是这样存储的),然后~a就是把a按位取反(小魔仙,全身变)变成1111 1111 1111 0101 (内存中也是这样存储的),此时最高位符号位变成了 “1” ,计算机会认为这是一个负数的补码形式。 大家都知道,负数的补码是“变反加一”计算出来的,那么计算机想以%d格式输出~a就需要把1111 1111 1111 0101 逆运算“减一取反”换回来
第一步 “减一” 1111 1111 1111 0101-1=1111 1111 1111 0100
第二步 “取反”(除了符号不取反) 1000 0000 0000 1011 最高位为1,表示负 转化成十进制就是 -11 了

同样的,负数取反的原理也和正数一样

简单的记:不管这个数等于什么,就直接把这个数前面加一个负号,然后再减一就是他的结果! 给你个口诀就是“变号减一” 如 a=100 那么~a就等于-100-1=-101,在如 a=-521,那么~a就等于-(-521)-1=520

第一次写,希望能帮到大家,有什么疑问请在评论留言。哈哈~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。