取反!和按位取反~的区别

http://blog.csdn.net/pipisorry/article/details/36517411

按位取反“~”:按位取反1变0,0变1

逻辑非“!”:逻辑取反, false变true,true变false,在C中,只要不是0就是真

------------------------------------------------------------------------------------------------------------------------------

所以

!5值是0

~按位取反

5二进制00000101,取反11111010,代表-6

所以~5值-6

~是按位取反,例如整数3,二进制形式是

00000000000000000000000000000011,按位取反后就是

11111111111111111111111111111100

!是逻辑否,一个非0数取否之后就是0,上面的3,用!之后就是0

所有的不是0的数用!操作后都是0

只有当操作数等于0xFFFFFFFF的,用!和~的结果值才是一样的

所有正整数的按位取反是其本身+1的负数

所有负整数的按位取反是其本身+1的绝对值

零的按位取反是 -1

ref:

http://blog.csdn.net/pipisorry/article/details/36517411

http://blog.csdn.net/xiexievv/article/details/8124108

取反!和按位取反~的区别

时间: 2024-10-14 19:47:53

取反!和按位取反~的区别的相关文章

正负数取反的结果和规律

按位取反运计算方法原创 jackytse_ 最后发布于2012-10-29 14:27:01 阅读数 11247 收藏展开 读本文前请首先搞懂  “反码”,“取反”,“按位取反(~)”,这3个概念是不一样的. 取反:0变1,1变0 反码:正数的反码是其本身,对于负数其符号位不变其它各位取反(0变1,1变0) 按位取反(~): 这将是下面要讨论的. “~”运算符在c.c++.java.c#中都有,之前一直没有遇到这个运算符. 要弄懂这个运算符的计算方法,首先必须明白二进制数在内存中的存放形式,二进

取反!和按位取反~的差别

http://blog.csdn.net/pipisorry/article/details/36517411 按位取反"~":按位取反1变0,0变1 逻辑非"!":逻辑取反, false变true,true变false,在C中,仅仅要不是0就是真 --------------------------------------------------------------------------------------------------------------

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

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

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;

二进制取反

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

取反NOT ,汇编指令SETZ(SETE) SETNZ(SETNE)

//___逻辑取反 !______________________________________________________非零值取反得到0,      0取反得到1 int i, j;i  = 0x8877;j = !i; 反汇编代码: MOV DWORD PTR SS:[EBP-4], 0X4321XOR EAX, EAXCMP DWORD PTR SS:[EBP-4], 0SETE AL                                                

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中的数都是有符

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