c语言 右移位什么情况补1,关于移位操作,该如何处理
关于移位操作
请教一下各位关于移位操作的问题。我现在被搞得有点晕了
1.C/C++和JAVA中的移位操作规则是不是不一样?
2.关于算术移位和逻辑移位。
左移时候比较好理解,都是末尾补0.但是右移的时候我就有点晕了。
正常情况逻辑移位是不管符号位,直接高位补0;而算术移位是根据符号位来补高位的。
比如11001右移2位。逻辑移位结果是00110,而算术移位结果是11110。(这个应该对的吧?)
但是我好想隐约记得还有一种,就是符号位保持不变,剩余的位右移并且在符号位后面补0 。
比如11001右移两位变成10010。我不知道有没有记错,如果没有记错的话。那么这种移位规则是什么?
3.关于C语言中的>>运算符,执行的是逻辑移位还是算术移位?
4.C语言中有没有>>>这个运算符?如果没有那么这个运算符是属于那种语言的?
5.感觉我把C和JAVA学混了?如果可以的话,希望能有人帮我理一下:
C语言中算术移位和逻辑移位的运算规则;
C语言中>>运算符使用了哪种规则;
JAVA语言中算术移位和逻辑移位的运算规则;
JAVA语言中>>运算符和>>>使用了哪种规则;
------解决方案--------------------
#include
unsigned char ui;
signed char si;
char main() {
ui=(unsigned char)0x80u;
si=( signed char)0x80;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
ui=ui>>1;
si=si>>1;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
printf("--------------\n");
ui=(unsigned char)0x80u;
si=( signed char)0x80;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
ui=(( signed char)ui)>>1;
si=((unsigned char)si)>>1;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
printf("==============\n");
ui=(unsigned char)0x80u;
si=( signed char)0x80;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
ui=ui<<1;
si=si<<1;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
printf("--------------\n");
ui=(unsigned char)0x80u;
si=( signed char)0x80;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
ui=(( signed char)ui)<<1;
si=((unsigned char)si)<<1;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
return 0;
}
//ui=128
//si=-128
//ui=64
//si=-64
//--------------
//ui=128
//si=-128
//ui=192
//si=64
//==============
//ui=128
//si=-128
//ui=0
//si=0
//--------------
//ui=128
//si=-128
//ui=0
//si=0
------解决方案--------------------
C语言中的>> 有符号数就是算数右移,无符号数就是逻辑右移
------解决方案--------------------
引用:请教一下各位关于移位操作的问题。我现在被搞得有点晕了
1.C/C++和JAVA中的移位操作规则是不是不一样?
2.关于算术移位和逻辑移位。
左移时候比较好理解,都是末尾补0.但是右移的时候我就有点晕了。
正常情况逻辑移位是不管符号位,直接高位补0;而算术移位是根据符号位来补高位的。
比如11001右移2位。逻辑移位结果是00110,而算术移位结果是11110。(这个应该对的吧?)
但是我好想隐约记得还有一种,就是符号位保持不变,剩余的位右移并且在符号位后面补0 。
比如11001右移两位变成10010。我不知道有没有记错,如果没有记错的话。那么这种移位规则是什么?
3.关于C语言中的>>运算符,执行的是逻辑移位还是算术移位?
4.C语言中有没有>>>这个运算符?如果没有那么这个运算符是属于那种语言的?
5.感觉我把C和JAVA学混了?如果可以的话,希望能有人帮我理一下:
C语言中算术移位和逻辑移位的运算规则;
C语言中>>运算符使用了哪种规则;
JAVA语言中算术移位和逻辑移位的运算规则;
JAVA语言中>>运算符和>>>使用了哪种规则;
C语言的移位算符在不同的编译器下,对有符号数会有不同的行为。所以只应当对无符号数进行移位操作。
c语言 右移位什么情况补1,关于移位操作,该如何处理相关推荐
- C语言 >> 右移位运算符的原理和一些概念
1.右移位于左移位不同 左移位 不管是 逻辑移位 算术移位 都是低位补0: 右移位 的 逻辑移位和算术移位不同, 算术移位高位补符号位,逻辑移位 高位补0: 右移位 使用逻辑移位的话 需要强制转换成u ...
- 常见位操作及运算应用举例:1,C语言中位运算符异或“∧”的作用2,异或运算的作用3,(与运算)、|(或运算)、^(异或运算)
1 C语言中位运算符异或"∧"的作用: 异或运算符∧也称XOR运算符.它的规则是若参加运算的两个二进位同号,则结果为0(假):异号则为1(真).即0∧0=0,0∧1=1,1∧1=0 ...
- c语言程序设计施莹答案,C语言课件-位运算.ppt
C语言课件-位运算.ppt C语言程序设计,信息工程学院 施莹 2019年11月,第12章 位运算,C语言是为描述系统而设计的,其功能应当具有汇编的功能 故C语言具有高级语言的的功能,也肯定低级语言的 ...
- c语言位运算负数的实例_一招教你学会C语言中位运算
程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说穿了,就是直接对整数在内存中的二进制位进行操作.注意,位运算只针对于整数进行操作. 运算符号 运算规则 1.&与运算:对应两个二进 ...
- 单片机中c语言 右移 和左移 与CY
单片机中c语言"右移>>和左移<<"与CY 左移 << 0100 1111 << 左移一位:1001 1110 CY=0 :第一位跑 ...
- 谭浩强c语言不讲位运算呢,谭浩强C语言_CHAR12位运算.DOC
您所在位置:网站首页 > 海量文档  > 计算机 > C/C++资料 谭浩强C语言_CHAR12位运算.DOC11页 ...
- C语言中位运算符有哪些
C语言中位运算符有: 位操作是程序设计中对位模式按位或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运 ...
- python左移右移位运算_荐Python : 位运算 —— 与、或、异或、左移、右移
Python : 位运算 -- 与.或.异或.左移.右移 位运算 位运算是把数字用 二进制 表示之后,对每一位上 0 或者 1 的运算.位运算共有 5 种运算:与.或.异或.左移.右移. 与.或.异或 ...
- Java移位运算符详解实例——左移位运算符、带符号的右移位运算符
移位运算符也针对二进制的"位",它主要包括:左移位运算符(<<).右移位运算符(>>>).带符号的右移位运算符(>>). 1.左移运算符 ...
最新文章
- Winserver-Exception from HRESULT: 0x800A03EC
- flutter进行自动编译操作步骤
- 因吵架总被骂,阿里程序猿一气之下发明“情侣吵架神器”
- Network in Network----Global Average Pooling
- 软考信息系统项目管理师_信息化与信息系统4_软件工程_新一代信息技术---软考高级之信息系统项目管理师006
- 【Vue起步-Windows】N01:环境安装
- Go语言同步和异步执行多个任务封装
- 问题解决:pip无法使用,经升级后可以使用
- 事业单位考试高频考点一:马克思主义基本原理
- 超全面的权限系统设计方案!
- 数字电路基础知识(四) 加法器-半加器、全加器与超前进位加法器
- git 版本控制~ 文件没有绿色和红色图标
- 探究文华盘整(PANZHENG)函数之一
- 内容过于真实,可能会引起不适-----程序员去面试的梗!面试官:“哦了,明天来上班吧”
- PHP微信根据订单号查询支付结果,9. PHP接入微信支付订单、退款订单、转款订单的查询...
- Nacos的配置及使用--windows
- Windows下PCIe接口的多串口卡驱动开发小结
- 关于百度oauth2.0登陆的诸多问题
- UVa12099书架
- 给公司领导的一些小建议