计算机中的“按位非”运算符

1、将需要运算的数据转为2进制数

例如十进制10
10进制转换为2进制的方法为
10 的二进制数就是21 + 23 也就是 1010, 从右到左为20, 21…依次递增
在这里插入图片描述这里稍微多加练习下,255内的二进制数能肉眼转换就差不多了

2、原码,反码和补码

为什么要了解这三个码,是因为我们人脑所识别的数据为“原码",而计算机所存储的数据为”补码“
计算机中的二进制表示法:
最高位表示数据的正负,“0”为正数,“1”为负数.
比如十进制“10”用八位来表示为“00001010”,
“-10”则为“10001010”

  1. 原码
    就如上面的二进制表示方法,最高位的“0”为正数,“1”为负数.,其余位表示数据的大小
    9的原码为:00001001
    -9的原码为:10001001

  2. 反码
    对于一个正数来说,其原反补三码为相同的,但对于负数来说,其反码为计算方式为“最高位符号位不变,其余位“1”转换成“0”,“0”转换成“1”
    -9的原码为:10001001,所以
    -9的反码为:11110110

  3. 补码
    一个数的补码,即为其反码+1.
    -9的反码为:11110110 ,所以其补码为:11110111

3、按位非

顾名思义,按位非也就是将二进制原码的每一位都进行非运算
假设在c语言中定义一个"int a =9",整型数据的大小为4字节也就是32bit,
所以9的原码,存储在计算机中的补码都为
”00000000,00000000,00000000,00001001“
进行按位非运算可得:
“11111111,11111111,1111111,11110110”
此数据首位为负数,所以存储在计算机中需要取得其补码
求反码可得:
“10000000,00000000,00000000,00001001”
在求其补码:
“10000000,00000000,00000000,00001010”
也就是23+21=8+2=10,加上“-”,结果为-10

在c环境中运行

#include <stdio.h>

int main()
{
    int c = 9;
    printf("^c=%d", ~c);
}

在这里插入图片描述

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值