c语言:操作符;第一篇 移位操作符(原码 反码 补码)

本文介绍了整数在计算机中的二进制表示,包括原码、反码和补码的概念,特别强调了负数的表示方式。接着,详细阐述了左移和右移操作符的工作原理,左移一位相当于乘以2,而右移分为算术右移和逻辑右移,具体行为依赖于编译器。最后,提醒读者注意移位操作符不应用于负数,因为这是未定义的行为。
摘要由CSDN通过智能技术生成

目录

一,原码 反码 补码

二,移位操作符

1,左移操作符

 2,右移操作符

三,注意事项

一,原码 反码 补码

整数的二进制表示有3种形势:原码 反码 补码。

正整数的原码 反码 补码 相同;负整数的原码 反码 补码 是要计算的

整数在内存中存储的是补码的二进制

例如:
int a=5 ;
为正整数
00000000 00000000 00000000 00000101   原码 (二进制)
00000000 00000000 00000000 00000101   反码
00000000 00000000 00000000 00000101   补码


int a= -5 ;
为负整数
10000000 00000000 00000000 00000101   原码  
//首位为1表示负号
11111111 11111111 11111111 11111010   反码 (原码的符号位不变,其他按位取反得到的就是反码)
11111111 11111111 11111111 11111011   补码  (反码+1 就是补码)

(以上以32为位位例)

二进制换算成十进制:

二,移位操作符

 使用移位操作符后,进行打印时,打印语句时打印的为原码,故补码要转化为补码(移位规则将在下文介绍)

以左移操作符为例:

#include <stdio.h>

int main ()
{
    int a = -5;
    int b=a << 1;//左移一位
    printf("%d\n",a);//-5
    printf("%d\n",b);//-10

    
     return 0;   
} 

//int a= -5 ;
//10000000 00000000 00000000 00000101   原码  
//11111111 11111111 11111111 11111010   反码 
//11111111 11111111 11111111 11111011   补码 
//左移一位
//10000000 00000000 00000000 00001010  //转为原码 打印
​

1,左移操作符

#include <stdio.h>

int main()
{
	int a = 5;
	int b = a << 1;
	printf("%d\n",a);//5
	printf("%d\n",b);//10

	return 0;
}

 2,右移操作符

右移操作符分为两种:1.算数右移:右边丢弃,左边补原符号位(如图:原位置为01,则补0);2.逻辑右移:右边丢弃,左边补0

当前编译器,在右移的是采用算数右移。到底是算数右移还是逻辑右移是取决于编译器!

#include <stdio.h>

int main() 
{
	int a = -5;
	int b = a >> 1;
	printf("%d\n", a);//-5
	printf("%d\n", b);//-3
	return 0;
}

三,注意事项

警告:对于移位操作符,不要移动负数位,这是标准未定义的。        

例如:

int a = 10;
num >> -1 ;//error

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值