|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1.
#include<stdio.h>
void main()
{
int a = 20, b;
for (int i = 1; i <= 3; i++)
{
b = a >> i;
printf("%d>>%d位后为:%d\n", a, i, b);
}
}
**********************************************************************************
20>>1位后为:10
20>>2位后为:5
20>>3位后为:2
C:\Users\lenovo\Desktop\Project1\x64\Debug\Project1.exe (进程 27476)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
************************************************************************************
这个是正常的,有正常的进度损失
2.
#include<stdio.h>
void main()
{
int a = 20, b;
for (int i = 1; i <= 3; i++)
{
b = a >> i;
printf("%d>>%d位后为:%d\n", a, i, b);
}
}
********************************************************************************
-20>>1位后为:-10
-20>>2位后为:-5
-20>>3位后为:-3
C:\Users\lenovo\Desktop\Project1\x64\Debug\Project1.exe (进程 30252)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
*********************************************************************************
这个就是多了个负号 -20右移3为就不是-2了额
按理来说:原码 : 1001 0100.
右移3为后: 1000 0010.100(舍弃) 即:1000 0010 =-2;
20 0001 0100 进行求补运算 取反1110 1011 +1后 1110 1100 这就是-20的二进制
-20>>3 算术右移3位 1111 1101 变成这个 也就是-3 对应的二进制了
因为是负数,左边第一位是1,所以算术右移3位相当于左边加 3个 1,右边再减去3位 .
至于取最小值那是我记忆的方法
|
|