首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求一部分代码讲解

2013-04-20 
求部分代码讲解#includestdio.hint main(){const int bitssizeof(int)*8unsigned int mask1bits-1

求部分代码讲解

#include<stdio.h>
int main()
{
const int bits=sizeof(int)*8;
unsigned int mask=1<<bits-1;//问题一:这里移位之后就变成二进制数了吗?
int n;
printf("input an integer:");
scanf("%d",&n);
int i;
for(i=0;i<bits;i++)
{
//printf("%c",n&mask?'1':'0');//问题二:这里n是十进制位啊,与的过程是什么?
//printf("%d",n<0);//问题三:下面的n每次左移一位结果是什么?然后在这里判断之后结果又是什么?例如100,
printf("%c",n<0?'1':'0');

//mask=mask>>1;
n<<=1;
}
printf("\n");
return 0;
}
c
[解决办法]
学计算机就要有一种观念:一切均为二进制
[解决办法]

#include<stdio.h>
int?main()
{
????const?int?bits=sizeof(int)*8;
????unsigned?int?mask=1<<bits-1;??? //问题一:二进制跟十进制只是表现形式不一样而已,没有本质区别
????int?n;
????printf("input?an?integer:");
????scanf("%d",&n);
????int?i;
????for(i=0;i<bits;i++)
????{
????????//printf("%c",n&mask?'1':'0');??????? //问题二:n呈现给你的是十进制,对计算机来说是二进制
????????//printf("%d",n<0);??????????????????? //问题三:相当于乘以2
????????printf("%c",n<0?'1':'0');
?
????????//mask=mask>>1;
????????n<<=1;
????}
????printf("\n");
????return?0;
}

[解决办法]
unsigned int mask=1<<bits-1;    //问题一:这里移位之后就变成二进制数了吗?
如果你的系统是32位的执行完后 mask=0x08000000,你也可以理解成第31位的值是1,0~30位的值是0。
printf("%c",n<0?'1':'0'); 
//问题二:这里n是十进制位啊,与的过程是什么?
如果你的n=100,看你上面的程序应该是i<=23时输出的值'1',23<i<30 应该是输出'0',i>30输出'1',

n<<=1;
//问题三:下面的n每次左移一位结果是什么?然后在这里判断之后结果又是什么?例如100,
n = n<<1;
100 << 1后应该是200。
[解决办法]

一:计算机只认识二进制,其他的进制只不过是为了方便人脑的记忆或计算。这个表达式有个运算符的优先级问题,相当于  1<<(bits-1)。
二:把n写成二进制形式,再计算与的结果.
   比如n=1;mask=2; n&mask=0,二进制表示为:0000,0001 & 0000,0010 = 0000,0000
三:位移运算,比如依上例: n << mask; 二进制表示为:0000,0001 << 2 = 0000,0100(十进制数:4)

楼主可根据以上讨论,在问题一那行下个断点,试着单步跟踪下上面的程序,相信你会让自己很愉悦的。

[解决办法]
电脑里统统是二进制数,在C语言里,用%x %d %o 等格式输出,只是二进制的不同表现形式而已。
[解决办法]
引用:
学计算机就要有一种观念:一切均为二进制

支持!

电脑内存只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

热点排行