收录日期:2018/05/25 16:51:18 时间:2016/05/20 18:27:35 标签:C语言
#include "stdio.h"

void main( void )
{
    int a , b;
    a = 077;

    b = a | 3;   //我认为执行后b=77,但实际却是63!
                 //为何?能解释解释吗?谢谢!   
    printf("\40: The a & b(decimal) is :%d \n" , b);

    b |= 7;      //b=77
    printf("\40: The a & b(decimal) is :%d \n" , b);

    return;
}

难道是我的二进制化错了?

我是觉得有点不可能!

顺便说一下我用的编译器是:tc 2.0
兄弟,"a = 077;"其实就是将a的值赋为八进制的77,它相当于十进制的63,然后再和十进制的3相或,结果肯定是十进制的63啦。
以0开头的数字编译器认为是一个八进制的。
077 = 63D = 00111111B

3D        = 00000011B
7D        = 00000111B

所以 都是 63 

另外 , 提醒 一下

好的 编程习惯 是 #include <stdio.h>

如果 是自己 写的 头文件 用 #include "myfile.h"
#include "stdio.h"

void main( void )
{
    int a , b;
    a = 077;  //a的二进制是0000000000111111就是十进制63,前面有零是表示8进制.同意楼上的.

    b = a | 3;   //0000000000111111
                 //0000000000000011
           //求或后0000000000111111,也就是还是a,就是十进制63,   
    printf("\40: The a & b(decimal) is :%d \n" , b);

    b |= 7;      //和上面一样.b=63
    printf("\40: The a & b(decimal) is :%d \n" , b);

    return;
}
caomuyong1(叶开)说的很对,"a = 077;"其实就是将a的值赋为八进制的77,它相当于十进制的63,然后再和十进制的3相或,结果肯定是十进制的63啦。
关键在于:以0开头的数字编译器认为是一个八进制的。
同意!
caomuyong1(叶开)说的是正确的。以0开头的是八进制数输入,你换算一下就可以了。8进制的77二进制是111111,这个正是十进制的63。
077 是八进制。
所以就和你的预想不一样了
呵呵,
努力啊
以0开头的数是8进制!

剩下的自己可以解决了吧!
结了,谢谢各位!小弟受益颇深!