C语言----取反~

一、正数

(1)执行~0001后 为1110(内存中就是这样存储0001取反的结果的)

这个结果是以补码的方式存储的

但是真真的显示的时候往往用原码,就是1010了<最高位为符号位,这里为1,就是负号,010为2,所以结果为-2,原码的显示是为了直观,真真的运算都是以补码来运算的>

~0001的结果就是-2,-2的原码就是1010,补码为1110

(2)25在内存中的存储为:0000 0000 0001 1001

就是~25=1111 1111 1110 0110<内存中储存这个结果>

用原码来显示:~25的原码为补码取反+1<符号位不动>

那么就为:1000 0000 0001 1001 + 1 = 1000 0000 0001 1010

最高位为符号位这里为负号,1000 0000 0001 1010=-26

所以结果为:-26

二、负数

计算机里存负数是用补码表示的,取反是反补码取反,补码取反,连符号位一起变反

#include "stdio.h"

int main(){

int a = -20;

//1000 0000 0001 0100

//1111 1111 1110 1100

//0000 0000 0001 0011

int b = 2;

//0000 0000 0000 0010

//1111 1111 1111 1101

//1000 0000 0000 0011

int c = -10;

//1000 0000 0000 1010

//1111 1111 1111 0110

//0000 0000 0000 1001

int d = 10;

//0000 0000 0000 1010

//1111 1111 1111 0101

//1000 0000 0000 1011

printf("a=%d,b=%d,c=%d,d=%d\n",~a,~b,~c,~d);

}

时间: 2024-11-08 21:25:24

C语言----取反~的相关文章

C语言位运算符:与、或、异或、取反、左移和右移

语言位运算符:与.或.异或.取反.左移和右移 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1~ 取反 ~

【转】C语言位运算符:与、或、异或、取反、左移与右移详细介绍

转载自:http://www.jb51.net/article/40559.htm,感谢原作者. 以下是对C语言中的位运算符:与.或.异或.取反.左移与右移进行了详细的分析介绍,需要的朋友可以过来参考下 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位

C语言位运算符:与、或、异或、取反、左移与右移详细介绍

位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. C语言提供的位运算符列表:& 按位与, 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或, 两个相应的二进制位中只要有一个为1,该位的结果值为1^ 按位异或, 若参加运算的两个二进制位值相同则为0,否则为1~ 取反, ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将

位运算常用操作总结位运算应用口诀清零取反要用与,某位置一可用或若要取反和交换,轻轻松松用异或移位运

来源:http://www.educity.cn/wenda/381487.html 位运算常用操作总结位运算应用口诀 清零取反要用与,某位置一可用或 若要取反和交换,轻轻松松用异或 移位运算 要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形.     2 " $amp;     3 "$amp;>amp;>quot;$右移:右边的位被挤掉.对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统.     4 "

2016-05-30 checkbox取反 两种方式

<script> //第一种方式:利用自身的属性设置取反 window.onload=function(){ var oInputs=document.getElementsByTagName("input"); oInputs[0].onclick=function(){ for(var i=1;i<oInputs.length;i++){ oInputs[i].checked=!oInputs[i].checked; } } } //第二种方式 设置取反 wind

关于取反~的运算

今天看到一个东西 SELECT ~32767 ----------- -32768 按位反的话为什么结果为什么不是-520而是-521呢? 然后我又看了看,才想起在二进制的世界里,第一个数位是表示正负数,所以在smallint 的2字节里面,是这样纸的 32767 0111 1111 1111 1111 所以当取反的时候就是 -32768 10 0000 0000 0000 有时候就是转不过弯,不确定的时候还是要动手看下才能巩固自己的只是

javascript取反再取反的作用

在javascript中按位取反再取反可以将一个浮点数的转化为整形,而且其效率要比parseInt高出将近一倍 var start = new Date().getTime(); for (var i = 0; i < 10000000; i++) { var a = Math.random() * 5; ~~a; } console.info(new Date().getTime() - start); start = new Date().getTime(); for (var i = 0;

将区域的颜色取反

快速将某一区域的颜色取反,主要应用在制作表格时的选择区域.  API函数:PatBlt(MyHDC:HDC;X,Y,WIDTH,HEIGHT:INTEGER;MODE);  例如:      var         MyDC:HDC;      Begin           MyDC:HDC;           MyDC:=GetDC(Form1.Handle);           if not PatBlt(MyDC,                         1,        

二进制取反

一个数用二进制或十六进制标识时,其实使用这个数的反码表示的 对一个数取反,就是对其反码取反,得到的值为反码 在C语言中,负数是以补码方式存放的,计算方法为,负数绝对值对应数值的二进制值,按位取反后再加一.当负数按位取反时,就是其补码按位取反.比如,-10在存储为char型时,10的二进制值为0000 1010,取反后为1111 0101, 加一得到补码的二进制值为 1111 0110, 所以-10在存为char型时,补码的16进制值形式为0xF6.当-10取反时,就是把1111 0110取反,结