关于取反~的运算

今天看到一个东西

SELECT ~32767

-----------
-32768

按位反的话为什么结果为什么不是-520而是-521呢?

然后我又看了看,才想起在二进制的世界里,第一个数位是表示正负数,所以在smallint 的2字节里面,是这样纸的

32767

0111 1111 1111 1111

所以当取反的时候就是

-32768

10 0000 0000 0000

有时候就是转不过弯,不确定的时候还是要动手看下才能巩固自己的只是

时间: 2024-08-11 01:34:37

关于取反~的运算的相关文章

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

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

php位运算 与 或 异或 取反

<?php /** php中有4个位运算,分别是&与 |或 ^异或 ~取反 & 两位全为1,结果为1 | 有一位为1,结果为1 ^ 一个为0,一个为1,结果为1 ~ 取反0->1,1->0 1.二进制的最高位是符号位,0表示正数,1表示负数. 2.正数的原码,反码,补码都一样. 3.负数的反码=它的原码符号位不变,其它位取反(0->1,1->0). 4.负数的补码=它的反码+1. 5.0的反码,补码都是0. 6.php没有无符号数,换言之,php中的数都是有符

负数取反,单目运算“-”的运算

首先看代码: int main(){ int i=-2147483648; return printf("%d,%d,%d,%d",~i,-i,1-i,-1-i); } 输出结果为: 2147483647,-2147483648,-2147483647,2147483647 这里就涉及到对负数取反,单目运算符"-"的理解,在int占4个字节,大小范围为-2147483648~2147483648,最高位代表符号位,所以第32位为1,这里就需要理解计算机中负数的表示形

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,则该位

PHP中关于位运算符 与 或 异或 取反

<?php /** * author:LMS * createTime:2015/07/22 * desctiption:位运算[ & | ^ ~ ] * 与&:如果a.b两个值不相同,则与结果为0.如果a.b两个值相同,与结果为1 * 或|:与逻辑中的或一致[只有两个值都为假时才为假,其余都为真] * 异或[xor]如果a.b两个值不相同,则异或结果为1.如果a.b两个值相同,异或结果为0 * 取反[~]:对每一位取反 * [注意!非 ==>是逻辑运算符,返回是个布尔值 */

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<内存中储存这个结果&g

复习一个知识点——原、反、补码以及取反操作

一.相关概念 1.1  机器数与真值 ·机器数  计算机中存储的数据都是带符号的二进制数,例如:5 → 0000 0101 , -5 → 1000 0101  此类数值称之为机器数. ·真值  为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值.如:1000 0101的形式值为133,但它实际表示的值为-5,-5称之为真值. 1.2  原.反.补码 ·原码  符号位加上真值的绝对值.如+5和-5的原码分别为:0000 0101和1000 0101 ·反码  正数的反码是它本身,负数的反

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

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