c语言取反1
⑴ c语言里的按位取反运算符是什么意思
按位取反就是0换成1,1换成0.
2的2进制是0000....0010,取反后就是1111....1101,就是-3的补码.
计算机保存的都是补码,正数补码与原码相同,负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
⑵ C语言,按位取反的时候怎么运算的!为什么~1的运算结果是﹣2
因为1的二进制表示是
0000 0000 0000 0000 0000 0000 0000 0001
按位取反之后为
1111 1111 1111 1111 1111 1111 1111 1110
有符号的数最高位为1表示负数
负数的补码是其原码取反加1
取补码:1000 0000 0000 0000 0000 0000 0000 0010
结果为-2
-2的二进制为2的反码取补码:
原码:0000 0000 0000 0000 0000 0000 0000 0010
反码:1111 1111 1111 1111 1111 1111 1111 1101
补码:1111 1111 1111 1111 1111 1111 1111 1110
所以 ~1 的运算结果为-2
⑶ c语言中按位取反-1怎么算
c语言中-1的绝对值是1,二进制00000001,取反为11111110,-1为11111111,取反是00000000。
1、所有正整数的按位取反是其本身+1的负数;
2、所有负整数的按位取反是其本身+1的绝对值;
3、零的按位取反是-1(0在数学界既不是正数也不是负数);
0的原码:
取反:
最高位是1所以是负数,求其原始数据,方法是
再次取反加1(符号位不变)
取反:
加
所以是-1
(3)c语言取反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。用它与指定的位串信息按位与。
⑷ C语言中二进制求补码过程中取反后再加1,那个1是怎么加的
二进制运算当然是在二进制数字间的运算。正数的补码等于原码,负数的补码就是取反加一(符号位不动)。举个“栗子”:\x0d\x0a求-7的补码。\x0d\x0a因为给定数是负数,则符号位为“1”。\x0d\x0a后七位:-7的原码(10000111)→按位取反(11111000)(负数符号位不变)→加1(11111001 加在末尾了),所以-7的补码是11111001。\x0d\x0a\x0d\x0a如果末位为1,加1后要进位,即‘10’。二进制只有0和1,不会出现‘2’的。