按位取反~(~1<<1)另外C语言负数按位取反是啥啊

作者&投稿:象斩 (若有异议请与网页底部的电邮联系)
按位取反~(~1<<1)另外C语言负数按位取反是啥啊~

按位取反就是每一位上0变成1,1变成0
比如2的二进制表示为00000000
00000010
按位取反后就变成
11111111
11111101
按位取反~(~1<<1)
先是~1
结果是11111111
11111110
然后左移一位<<1

结果是
11111111
11111100
然后再取一次反
结果是
00000000
00000011
结果就3.
所以~(~1<<1)的最后结果是3

0001
取反
1110

符号位为1,取反+1为
1010
转化成10进制为
-2

正数的原码,补码,反码都相同,都等于它本身
负数的补码是:符号位为1,其余各位求反,末位加1
反码是:符号位为1,其余各位求反,但末位不加1
也就是说,反码末位加上1就是补码

1100110011 原
1011001100 反 除符号位,按位取反
1011001101 补 除符号位,按位取反再加1

正数的原反补是一样的

在计算机中,数据是以补码的形式存储的:

在n位的机器数中,最高位为符号位,该位为零表示为正,为1表示为负;

其余n-1位为数值位,各位的值可为0或1。

当真值为正时:原码、反码、补码数值位完全相同;

当真值为负时:

原码的数值位保持原样,

反码的数值位是原码数值位的各位取反,

补码则是反码的最低位加一。

注意符号位不变。

如:若机器数是16位:

十进制数 17 的原码、反码与补码均为: 0000000000010001

十进制数-17 的原码、反码与补码分别为:1000000000010001、1111111111101110、1111111111101111

一、~(~1<<1)
计算过程为
1 先将1按位取反,即计算~1, 结果为除最低位为0外,其它位均为1;
2 计算左移1位,低位补0,于是结果的最低2位为0,其它为为1;
3 将2中结果按位取反,得到结果为,最低2位为1,其它为为0;
所以最终结果为3。

二、

在C语言中,负数是以补码方式存放的,计算方法为,负数绝对值对应数值的二进制值,按位取反后再加一。
当负数按位取反时,就是其补码按位取反。
比如,-10在存储为char型时,10的二进制值为0000 1010,取反后为1111 0101, 加一得到补码的二进制值为 1111 0110, 所以-10在存为char型时,补码的16进制值形式为0xF6.
当-10取反时,就是把1111 0110取反,结果为0000 1001, 结果为10进制的9。

1的二进制表示为00000000 00000001

按位取反就是每一位上0变成1,1变成0

上面这个就变成11111111 111111110

按位取反~(~1<<1)
先是~1
结果是11111111 111111110
然后左移一位<<1
结果是 111111111 11111100

然后再取一次反
结果是 00000000 00000011
结果就3.。。。

所以~(~1<<1)的最后结果是3

希望能帮到你。。。。

~(~1<<1)的值为3,不管负数整数,一律按位取反,1变0,0变1。放然负数取反就成正了非负数。

C语言_084_取反运算




C语言中按位异或和按位取反有什么区别?
1 ^ 0 = 1,0 ^ 1 = 1,0 ^ 0 = 0;取反运算,单目运算符:~1 = 0,~0 = 1;以上例子 1 代表真,0 代表假。按位运算就是将二进制位的每一位进行如上计算。如 2 | 5,转换为二进制(以 1 字节 8 位为例):00000010 | 00000101,每个二进制位分别进行或运算后得:00000111 ...

c语言中按位取反-1怎么算
3、零的按位取反是-1(0在数学界既不是正数也不是负数);0的原码:00000000000000000000000000000000 取反:11111111111111111111111111111111 最高位是1所以是负数,求其原始数据,方法是 再次取反加1(符号位不变)取反:10000000000000000000000000000000 加110000000000000000000000000000001 所以是-1 ...

c语言。0按位取反是1还是-1,1按位取反是0吗?
Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。补码的规定如下:对正数来说,最高位为0,其余各位代表数值本身(以二进制表示),如+42的补码为00101010。对负数而言,把该数绝对值的补码按位取反,然后对整个数加1,即得该数的补码。如-42的补码为...

c语言中的位运算符中‘按位取反’是怎么运算的,什么是负数的反码,请各...
1011001101 补 除符号位,按位取反再加1 正数的原反补是一样的 在计算机中,数据是以补码的形式存储的:在n位的机器数中,最高位为符号位,该位为零表示为正,为1表示为负;其余n-1位为数值位,各位的值可为0或1。当真值为正时:原码、反码、补码数值位完全相同;当真值为负时:原码的数值位...

1按位取反结果是多少?
可以来验证一下:include "iostream"using namespace std;int main(){ cout<<~1<<endl;\/\/数值1按位取反后输出对应的十进制数 return 0;} 我用的是vc环境,整型好像是占用4个字节,有符号位,结果为-2 不知道这样解释你是否能够明白?如果想深入的探究计算机中有关的存储细节,建议看看《组成原理...

位运算。取反的步骤 1的位非为-2。但不知道为什么,麻烦大神给个详细变...
位运算应用于整型数据,即把整型数据看成是固定的二进制序列,然后对这些二进制序列进行按位运算。按位求反运算运算规则是将二进制表示的运算对象按位取反,即将1变为0,将0变为1。C语言提供了两个移位运算:左移和右移,它们是把整数作为二进制位序列,求出把这个序列左移若干位或者右移 若干位所...

按位取反运算符
~077o=11000000b是没有错的,但在计算机中,整数是使用补码来表示的。正数的补码与原码相同,而负数的补码则是最高位为1表示负数,其余低位是将该负数的绝对值取反加1来表示的。例如-64d,如果用8位二进制补码表示的话,最高位为1表示负数,其余7位则将-64d的绝对值64d=1000000b,取反加1得...

将一个数按位取反,符号位是否改变
正数的原码,补码,反码都相同,都等于它本身 负数的补码是:符号位为1,其余各位求反,末位加1 反码是:符号位为1,其余各位求反,但末位不加1

关于按位取反计算
-1的四位补码因为-1是负数,最高位为1。绝对值1的原码为 001 反码为110 补码=反码+1,即111 与符号并接在一起,得到-1的补码为 1 111

C语言求大神!!~按位取反,0取反为什么是-1不是1?
按位取反是指按照"二进制位"0 的二进制为 0000 0000 0000 0000 取反以后得到 1111 1111 1111 1111 这个是-1的补码

马村区15025018844: 单片机位运算
邲茅益肝: 以上运算符优先级为:~(按位取反)&gt;+(加法符号)&gt;&lt;&lt;(左移运算符)&gt;|(按位或)&gt;=(等号) a=356=(101100100)2 b=(~101100100)|(101100100&lt;&lt;(2+1))=010011011|100100000=110111011

马村区15025018844: 逻辑运算符号&&、||、!的 相对优先级是怎样的?
邲茅益肝: 运算符运算等级如下 其中 1级优先级最高,15级最低, 1级优先级 左结合 () 圆括号 [] 下标运算符 -&gt; 指向结构体成员运算符 . 结构体成员运算符 2级优先级 右结合 ! 逻辑非运算符 ~ 按位取反运算符 ++ 自增运算符 -- 自减运算符 - 负号运算...

马村区15025018844: P0=~(1<<(7 - i)) c语言中什么意思? -
邲茅益肝: 将1按位左移7-i;然后再将其按位取反,给P0.0-P0.7赋值. 比如i=0时,操作完后变成了10000000 取反后10000000变成01111111

马村区15025018844: 单片机 某为清0的问题 -
邲茅益肝: 这个你推算一下就出来了1&lt;&lt;PC3,就会将1左移PC3个位,做一个中间量使需要清零的位的位置变为1,然后取反,那么,就是除了清零的位置成为0,其它位为1,然后与寄存器作与运算,结果就是该位清零 而0&lt;&lt;PC3结果始终为0,那么做与运算,就会将整个数据清零.例:PC3为4 则1&lt;&lt;4 为 00010000B,取反为11101111,与数据做与,将只会清除中间为0的那一位 而0&lt;&lt;4 为 00000000B,相与之后,结果所有位全为0了

马村区15025018844: c语言位运算 -
邲茅益肝: c;,d;8;<b'. 按位或运算 按位或运算符“|”是双目运算符;&gt,例如9^5可写成算式如下: &quot. main(){ unsigned a, 可作 a&255 运算 ( 255 的二进制数为0000000011111111);;2 表示把000001111右移为00000011(十进制3): a< a=a^15...

马村区15025018844: 按位取反运算:int a=16,c=~a;,变量c的值为多少??
邲茅益肝: 取反~要把符号位也考虑进去:把操作数各位0变1, 1变0 要考虑符号位的是 左移:把左操作数左移指定位数,右端空位置补0 右移:把做操作数右移指定位数,左端空位置上的值与原来的符号为相同,对无符号数左端移入0; #include&lt;stdio.h&gt; void main(){ int a = 16, b = 10, c; c = ~16; printf("%d\n",c); c = a&lt;&lt;2; printf("%d\n",c); c = a&gt;&gt;2; printf("%d\n",c); } -17 64 4 Press any key to continue

马村区15025018844: &是什么意思,在c语言里
邲茅益肝: 我的笔记,很清楚,你复习下吧. 位与字节 1,按位运算也就是对字节或字中的实际位进行检测,设置或移位. 2,C语言中的位运算符有: 运算符 功能 运算符 功能 运算符 功能 &amp; 按位与 ~ 取反 &lt;&lt; 左移 | 按位或 ^ 按位异或 &gt;&gt; ...

马村区15025018844: c51 如何改一个字节的某一位数据
邲茅益肝: 刚想到一个办法,可能很笨,希望对你有点帮助. 要将a的第b位设为1时:可以将1左移B位,再和a进行或运算. 要将a的第b位设为0时:可以将1左移B位,按位取反,再和a进行与运算. ... ... uchar a,b,c; ... ... if(xxxxxxxxx) //xxxxxxx处填入将使a的b位置1的外部条件 { c=1&lt;&lt;b; a|=c; } ... ... if(xxxxxx) //xxxxxxx处填入将使a的b位置0的外部条件 { c=1&lt;&lt;b; c=~c; a&amp;=c; }

马村区15025018844: 若有定义和语句,int a=10,b=5,x; char c='A'; x=a&b&&c<'a';则x的值是?
邲茅益肝: 1) 位运算&amp; 按位与| 按位或^ 按位异或~ 取反10二进制 1010, 5二进制101, a&amp;b = 10 &amp; 5 = 0.2) 'A' ASCII码 65, 'a' ASCII码97 (小写字母比对应大写字母ASCII码大32)'A' &lt; 'a' 为真(对于字符,系统内部用整数ASCII码表示)关...

马村区15025018844: ARM7 编程里如何定义一个位? 单片机中用sbit 在ARM里编程去无法定义 是不是需要什么头文件啊?
邲茅益肝: 楼上说的都没错~arm不能进行位操作,只能按以下方式来进行: #define AA_set port |= (1&lt;&lt;?) // ?表示置1第几位 比如?=1,将第1位置1 #define AA_clr port &amp;= ~(1&lt;&lt;?) // ?表示清除第几位 比如?=1,将第1位置0 比如: ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网