C语言按位求反运算为什么这个是-1?
c语言中-1的绝对值是1,二进制00000001,取反为11111110,-1为11111111,取反是00000000。
1、所有正整数的按位取反是其本身+1的负数;
2、所有负整数的按位取反是其本身+1的绝对值;
3、零的按位取反是-1(0在数学界既不是正数也不是负数);
0的原码:00000000000000000000000000000000
取反:11111111111111111111111111111111
最高位是1所以是负数,求其原始数据,方法是
再次取反加1(符号位不变)
取反:10000000000000000000000000000000
加110000000000000000000000000000001
所以是-1
扩展资料
C语言按位与运算符(&)
按位与运算将两个运算分量的对应位按位遵照以下规则进行计算:
0&0=0,0&1=0,1&0=0,1&1=1。
即同为1的位,结果为1,否则结果为0。
例如,设3的内部表示为
00000011
5的内部表示为
00000101
则3&5的结果为
00000001
按位与运算有两种典型用法,一是取一个位串信息的某几位,如以下代码截取x的最低7位:x&0177。二是让某变量保留某几位,其余位置0,如以下代码让x只保留最低6位:x=x&077。以上用法都先要设计好一个常数,该常数只有需要的位是1,不需要的位是0。用它与指定的位串信息按位与。
i为int类型 通常占4个字节
0的原码:0000 0000 0000 0000 0000 0000 0000 0000
取反: 1111 1111 1111 1111 1111 1111 1111 1111
最高位是1所以是负数,求其原始数据,方法是
再次取反加1(符号位不变)
取反: 1000 0000 0000 0000 0000 0000 0000 0000
加1 1000 0000 0000 0000 0000 0000 0000 0001
所以是 -1
按位取反后,得到1111 1111
这个数字转换为十进制数字就是-1
按位取反最高位默认为符号位,非负数的符号位为1,去反即为-1
c语言按位取反运算,0的绝对值是0;二进制是00000000;取反为11111111;再...
对啊,正是因为放不开啊,0的二进制是00000000,取反11111111,全部再加1,根据二进制的运算,得100000000,这时c语言中出现一种现象叫截断,举个例子,如果一个变量只有一字节,即只能放的下8位,前面提到了加1,就变成100000000,因为只有放8位,多出来的1会被舍去,保留后面,00000000不还是0吗?再...
c++中的~是什么意思?
具体示例:如果 x 是 5,即二进制表示为 00000101,那么 ~x 结果是 -6,即二进制表示为 11111010。如果 x 是 0,即二进制表示为 00000000,那么 ~x 结果是 -1,即二进制表示为 11111111。在 C++ 中,按位取反运算符 ~ 通常用于一些位操作或者特定的数值运算场景中。
C语言中取反运算符'"!"如何使用?
运算符"!"是逻辑非运算符;"~"才是按位取反运算符。经过"!"运算后,运算结果只有0或1;而经过"~"运算后,结果有多种,取决于操作数。下面通过实例来介绍这个运算符的使用方法:int a=10, b, c;b = !a; \/\/ 运算后b=0,因为a不等于0(即为真),所以取非后等于0(为假)c = ~...
c语言位运算符的用法
一、位运算符C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 例如:9&5可写...
c语言。0按位取反是1还是-1,1按位取反是0吗?
Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。补码的规定如下:对正数来说,最高位为0,其余各位代表数值本身(以二进制表示),如+42的补码为00101010。对负数而言,把该数绝对值的补码按位取反,然后对整个数加1,即得该数的补码。如-42的补码为...
c语言叹号是什么意思
位运算符是对二进制数进行操作的运算符,在C语言中有多种用法,包括按位与(&)、按位或(|)、按位异或(^)、左移(>)等。按位取反运算符(~)将一个数的所有位都取反,即0变为1,1变为0。而叹号按位取反运算符(!~)则将取反后的结果再进行逻辑非运算,即将所有非零的位变为0,...
什么叫单目运算符,什么叫双目运算符呀
单目运算符是指运算所需变量为一个的运算符,即在运算当中只有一个操作数,又叫一元运算符,其中有逻辑非运算符:!、按位取反运算符:~、自增自减运算符:++, --等。例:5 + 6 和 5++ ---在C语言中,5++是非法的。前者5 和 6为操作数+ 为运算符,但是 + 需要两个操作数,所以它不...
C语言的按位与、或、非、异或都什么意思。有什么用
、右移(>>)六种。位运算符 & |~<< >> ∧ 按优先级从高到低排列的顺序是:位运算符中求反运算“~“优先级最高,而左移和右移相同,居于第二,接下来的顺序是按位与 “&“、按位异或 “∧“和按位或 “|“。顺序为~ << >> & ∧ | 。...
C语言求大神!!~按位取反,0取反为什么是-1不是1?
按位取反是指按照"二进制位"0 的二进制为 0000 0000 0000 0000 取反以后得到 1111 1111 1111 1111 这个是-1的补码
C语言 按位取反
涉及到补码反码 2的原码是00000010 那么-2 的原码为10000010取反得反码11111101,末尾加1得补码11111110 取反后就为00000001,不就是1吗 不对,正数的原码补码和原码相同,负数才按上面的方法来求
依俭葡立: 0按位取反(注意这里的位是指二进制的位)后,结果是(以32位为例):11111111111111111111111111111111 这刚好是-1的补码.
江洲区19698572996: c语言中按位取反 - 1怎么算 - ?
依俭葡立: -1是这样表示的:-1的绝对值是1,二进制0000 0001,取反为1111 1110,加1等于1111 1111,所以-1为1111 1111,这个取反当然是0000 0000
江洲区19698572996: C语言,按位取反的时候怎么运算的!为什么~1的运算结果是﹣2 - ?
依俭葡立: 1的二进制表示是0000 0000 0000 0001,用~取反就是1111 1111 1111 1110 这个是补码,因为在位运算符中出现的数都是以二进制补码形式出现,你可以去翻书看看.补码=反码+1.所以将这个数减去1,再取反转换成原码(取反除符号位):即是1000 0000 0000 0010 所以~1的结果等于 -2
江洲区19698572996: c语言中的位运算符中'按位取反'是怎么运算的,什么是负数的反码,请各位帮我解释一下!!! - ?
依俭葡立: 0001 取反 1110 符号位为1,取反+1为 1010 转化成10进制为 -2 正数的原码,补码,反码都相同,都等于它本身 负数的补码是:符号位为1,其余各位求反,末位加1 反码是:符号位为1,其余各位求反,但末位不加1 也就是说,反码末位加上1...
江洲区19698572996: 在c语言中a&~(a - 1) 是怎么计算的怎么计算的 - ?
依俭葡立: 这个是根据优先级来算的,其中括号优先级最大先算括号里面的也就是a-1,然后是单目运算符~按位取反也就是对a-1的值按位取反,最后是&按位与运算符也就是a和前面取反的值进行与位运算.
江洲区19698572996: c语言中位运算中的取反运算150取反? - ?
依俭葡立: 符号位0取反变成1,就是负数,去掉符号位就行了 用这个类型试试 unsigned char
江洲区19698572996: C语言中“~”按位取反~2的值为何是 - 3?
依俭葡立: 按位取反就是0换成1,1换成0. 2的2进制是0000....0010,取反后就是1111....1101,就是-3. (ffff是-1,fffe是-2,fffd是-3)
江洲区19698572996: 位运算.取反的步骤 1的位非为 - 2.但不知道为什么,麻烦大神给个详细变化过程 - ?
依俭葡立: 位运算应用于整型数据,即把整型数据看成是固定的二进制序列,然后对这些二进制序列进行按位运算.按位求反运算运算规则是将二进制表示的运算对象按位取反,即将1变为0,将0变为1.C语言提供了两个移位运算:左移和右移,它们是把整数作为二进制位序列,求出把这个序列左移若干位或者右移 若干位所得到的序列.左移和右移都是双目运算,运算符左边的运算对象是被左移或右移的数据,而运算符右边的运算对象是指明移动的位数
江洲区19698572996: C语言函数反回值是 - 1是什么意思 - ?
依俭葡立: 所谓函数返回值是一个函数在运算结束以后向调用它的母函数或者系统反馈一个值,这个值可以是各种变量类型. 举个简单的例子: int add(int a,int b) { return (a+b); } int main() { int res; res=add(3,4); printf("%d",res); return 0; } 在主函数main中调用子函数add,并传递参数3和4过去,add经过运算后得到值7,通过return语句将得到的值返回给调用它的main函数供其使用,而在main中,返回值被用于给res赋值. 函数返回值就可以理解为解决一个问题以后得到的结论,把这个结论交给别人,就像写在书上成为一个定理,来让别人使用.
江洲区19698572996: C语言中的位运算符'"~"是怎么取反的 - ?
依俭葡立: int型整数有正负号,用补码表示.2的取反是 11111111 11111111 11111111 11111101,是负数.这个负数的十进制绝对值可用“取反加1“获得:即00000000 00000000 00000000 00000011 ,就是3.绝对值为3的负数,就是-3.如果a是unsigned型的整数,转换成十进制用的是原码而不是补码,~a就是一个很大的正数.