您的位置:

c语言符号位为1,c语言的位运算符号

本文目录一览:

c语言位运算符的用法

c语言位运算符的用法1

c语言位运算符的用法如下:

一、位运算符C语言提供了六种位运算符:

按位与

| 按位或

^ 按位异或

~ 取反

左移

右移

1. 按位与运算

按位与运算符""是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。

例如:95可写算式如下: 00001001 (9的二进制补码)00000101 (5的二进制补码) 00000001 (1的二进制补码)可见95=1。

按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a255 运算 ( 255 的二进制数为0000000011111111)。

main(){

int a=9,b=5,c;

c=ab;

printf("a=%d/nb=%d/nc=%d/n",a,b,c);

}

2. 按位或运算

按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。

例如:9|5可写算式如下: 00001001|00000101

00001101 (十进制为13)可见9|5=13

main(){

int a=9,b=5,c;

c=a|b;

printf("a=%d/nb=%d/nc=%d/n",a,b,c);

}

3. 按位异或运算

按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)。

main(){

int a=9;

a=a^15;

printf("a=%d/n",a);

}

4. 求反运算

求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。例如~9的运算为: ~(0000000000001001)结果为:1111111111110110。

5. 左移运算

左移运算符“”是双目运算符。其功能把“ ”左边的运算数的各二进位全部左移若干位,由“”右边的数指定移动的位数,高位丢弃,低位补0。例如: a4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。

6. 右移运算

右移运算符“”是双目运算符。其功能是把“ ”左边的运算数的`各二进位全部右移若干位,“”右边的数指定移动的位数。

例如:设 a=15,a2 表示把000001111右移为00000011(十进制3)。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。

main(){

unsigned a,b;

printf("input a number: ");

scanf("%d",a);

b=a5;

b=b15;

printf("a=%d/tb=%d/n",a,b);

}

请再看一例!

main(){

char a='a',b='b';

int p,c,d;

p=a;

p=(p8)|b;

d=p0xff;

c=(p0xff00)8;

printf("a=%d/nb=%d/nc=%d/nd=%d/n",a,b,c,d);

}

c语言位运算符的用法2

C语言位运算。所谓位运算,就是对一个比特(Bit)位进行操作。比特(Bit)是一个电子元器件,8个比特构成一个字节(Byte),它已经是粒度最小的可操作单元了。

C语言提供了六种位运算符:

按位与运算()

一个比特(Bit)位只有 0 和 1 两个取值,只有参与运算的两个位都为 1 时,结果才为 1,否则为 0。例如11为 1,00为 0,10也为 0,这和逻辑运算符非常类似。

C语言中不能直接使用二进制,两边的操作数可以是十进制、八进制、十六进制,它们在内存中最终都是以二进制形式存储,就是对这些内存中的二进制位进行运算。其他的位运算符也是相同的道理。

例如,9 5可以转换成如下的运算:

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)

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

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0001 (1 在内存中的存储)

也就是说,按位与运算会对参与运算的两个数的所有二进制位进行运算,9 5的结果为 1。

又如,-9 5可以转换成如下的运算:

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)

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

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)

-9 5的结果是 5。

关于正数和负数在内存中的存储形式,我们已在教程《整数在内存中是如何存储的》中进行了讲解。

再强调一遍,是根据内存中的二进制位进行运算的,而不是数据的二进制形式;其他位运算符也一样。以-95为例,-9 的在内存中的存储和 -9 的二进制形式截然不同:

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

-0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (-9 的二进制形式,前面多余的 0 可以抹掉)

按位与运算通常用来对某些位清 0,或者保留某些位。例如要把 n 的高 16 位清 0 ,保留低 16 位,可以进行n 0XFFFF运算(0XFFFF 在内存中的存储形式为 0000 0000 -- 0000 0000 -- 1111 1111 -- 1111 1111)。

【实例】对上面的分析进行检验。

00001. #include

00002.

00003. int main(){

00004. int n = 0X8FA6002D;

00005. printf("%d, %d, %X ", 9 5, -9 5, n 0XFFFF);

00006. return 0;

00007. }

运行结果:

1, 5, 2D

按位或运算(|)

参与|运算的两个二进制位有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0。例如1|1为1,0|0为0,1|0为1,这和逻辑运算中的||非常类似。

例如,9 | 5可以转换成如下的运算:

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)

| 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)

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

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1101 (13 在内存中的存储)

9 | 5的结果为 13。

又如,-9 | 5可以转换成如下的运算:

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

| 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)

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

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

-9 | 5的结果是 -9。

按位或运算可以用来将某些位置 1,或者保留某些位。例如要把 n 的高 16 位置 1,保留低 16 位,可以进行n | 0XFFFF0000运算(0XFFFF0000 在内存中的存储形式为 1111 1111 -- 1111 1111 -- 0000 0000 -- 0000 0000)。

【实例】对上面的分析进行校验。

00001. #include

00002.

00003. int main(){

00004. int n = 0X2D;

00005. printf("%d, %d, %X ", 9 | 5, -9 | 5, n | 0XFFFF0000);

00006. return 0;

00007. }

运行结果:

13, -9, FFFF002D

按位异或运算(^)

参与^运算两个二进制位不同时,结果为 1,相同时结果为 0。例如0^1为1,0^0为0,1^1为0。

例如,9 ^ 5可以转换成如下的运算:

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)

^ 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)

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

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1100 (12 在内存中的存储)

9 ^ 5的结果为 12。

又如,-9 ^ 5可以转换成如下的运算:

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

^ 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)

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

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0010 (-14 在内存中的存储)

-9 ^ 5的结果是 -14。

按位异或运算可以用来将某些二进制位反转。例如要把 n 的高 16 位反转,保留低 16 位,可以进行n ^ 0XFFFF0000运算(0XFFFF0000 在内存中的存储形式为 1111 1111 -- 1111 1111 -- 0000 0000 -- 0000 0000)。

【实例】对上面的分析进行校验。

00001. #include

00002.

00003. int main(){

00004. unsigned n = 0X0A07002D;

00005. printf("%d, %d, %X ", 9 ^ 5, -9 ^ 5, n ^ 0XFFFF0000);

00006. return 0;

00007. }

运行结果:

12, -14, F5F8002D

取反运算(~)

取反运算符~为单目运算符,右结合性,作用是对参与运算的二进制位取反。例如~1为0,~0为1,这和逻辑运算中的!非常类似。。

例如,~9可以转换为如下的运算:

~ 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)

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

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0110 (-10 在内存中的存储)

所以~9的结果为 -10。

例如,~-9可以转换为如下的运算:

~ 1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

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

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1000 (9 在内存中的存储)

所以~-9的结果为 8。

【实例】对上面的分析进行校验。

00001. #include

00002.

00003. int main(){

00004. printf("%d, %d ", ~9, ~-9 );

00005. return 0;

00006. }

运行结果:

-10, 8

左移运算()

左移运算符用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补0。

例如,93可以转换为如下的运算:

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)

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

0000 0000 -- 0000 0000 -- 0000 0000 -- 0100 1000 (72 在内存中的存储)

所以93的结果为 72。

又如,(-9)3可以转换为如下的运算:

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

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

1111 1111 -- 1111 1111 -- 1111 1111 -- 1011 1000 (-72 在内存中的存储)

所以(-9)3的结果为 -72

如果数据较小,被丢弃的高位不包含 1,那么左移 n 位相当于乘以 2 的 n 次方。

【实例】对上面的结果进行校验。

00001. #include

00002.

00003. int main(){

00004. printf("%d, %d ", 93, (-9)3 );

00005. return 0;

00006. }

运行结果:

72, -72

右移运算()

右移运算符用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1。如果数据的最高位是 0,那么就补 0;如果最高位是 1,那么就补 1。

例如,93可以转换为如下的运算:

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)

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

0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0001 (1 在内存中的存储)

所以93的结果为 1。

又如,(-9)3可以转换为如下的运算:

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

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

1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 1110 (-2 在内存中的存储)

所以(-9)3的结果为 -2

如果被丢弃的低位不包含 1,那么右移 n 位相当于除以 2 的 n 次方(但被移除的位中经常会包含 1)。

【实例】对上面的结果进行校验。

00001. #include

00002.

00003. int main(){

00004. printf("%d, %d ", 93, (-9)3 );

00005. return 0;

00006. }

运行结果:

1, -2

c语言位运算符的用法3

一、位运算符

在计算机中,数据都是以二进制数形式存放的,位运算就是指对存储单元中二进制位的运算。C语言提供6种位运算符。

二、位运算

位运算符 |~ ∧ 按优先级从高到低排列的顺序是:

位运算符中求反运算“~“优先级最高,而左移和右移相同,居于第二,接下来的顺序是按位与 ““、按位异或 “∧“和按位或 “|“。顺序为~ ∧ | 。

例1:左移运算符“”是双目运算符。其功能把“ ”左边的运算数的各二进位全部左移若干位,由“”右边的数指定移动的位数,高位丢弃,低位补0。

例如:

a4

指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。

例2:右移运算符“”是双目运算符。其功能是把“ ”左边的运算数的各二进位全部右移若干位,“”右边的数指定移动的位数。

例如:

设 a=15,

a2

表示把000001111右移为00000011(十进制3)。

应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。

例3:设二进制数a是00101101 ,若通过异或运算a∧b 使a的高4位取反,低4位不变,则二进制数b是。

解析:异或运算常用来使特定位翻转,只要使需翻转的位与1进行异或操作就可以了,因为原数中值为1的位与1进行异或运算得0 ,原数中值为0的位与1进行异或运算结果得1。而与0进行异或的位将保持原值。异或运算还可用来交换两个值,不用临时变量。

如 int a=3 , b=4;,想将a与b的值互换,可用如下语句实现:

a=a∧b;

b=b∧a;

a=a∧b;

所以本题的答案为: 11110000 。

c语言中符号位是什么意思?

你定义一个数 其实在计算机里面都是转化为二进制,也就是0和1,然后 他的最高位就代表符号,最高位的 0 和 1 代表的就是这个数的正负

c语言关系运算中负数是按0还是按1

1、关系运算符中是判断逻辑,而不是正负;

2、逻辑只有真假,是0即假,非0即真;

3、按你所说负数当然是真咯!

如果满意,请采纳!

C语言中如何定义有符号整数

C语言中定义有符号整型:signed

int

x;

由于signed

可以省略,所以

int

x;

也是可以定义有符号整型变量x

C语言中,有符号数与无符号数主要是由于是高位是否代表符号(正、负数)来决定的。有符号数是最高位(二进制位)代表符号,1代表是负数,0代表是正数,不管是正数还是负数都是以补码的形式存储与使用的。

(1)正数的补码:与原码相同。

例如,+9的补码是00001001。

(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。

例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码0000111按位取反为1111000;再加1,所以-7的补码是11111001。