计算机中的“按位非”运算符
1、将需要运算的数据转为2进制数
例如十进制10
10进制转换为2进制的方法为
10 的二进制数就是21 + 23 也就是 1010, 从右到左为20, 21…依次递增
这里稍微多加练习下,255内的二进制数能肉眼转换就差不多了
2、原码,反码和补码
为什么要了解这三个码,是因为我们人脑所识别的数据为“原码",而计算机所存储的数据为”补码“
计算机中的二进制表示法:
最高位表示数据的正负,“0”为正数,“1”为负数.
比如十进制“10”用八位来表示为“00001010”,
“-10”则为“10001010”
-
原码
就如上面的二进制表示方法,最高位的“0”为正数,“1”为负数.,其余位表示数据的大小
9的原码为:00001001
-9的原码为:10001001 -
反码
对于一个正数来说,其原反补三码为相同的,但对于负数来说,其反码为计算方式为“最高位符号位不变,其余位“1”转换成“0”,“0”转换成“1”
-9的原码为:10001001,所以
-9的反码为:11110110 -
补码
一个数的补码,即为其反码+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);
}