请教一个 C 语言位运算符的问题。

麦秸 发布于 2013/03/02 22:39
阅读 125
收藏 0

很多资料上都说 ~ 运算符的作用是按位取反,下面的程序:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    short int has = 10;
    char val =10 ;
   
    has = ~has;
    val = ~val ;

    printf("%d",has);
    printf("%d",val);
    printf("%d",sizeof(short int));
    
    return 0;
}

输出结果:

-11

-11

  2

为什么前两个输出结果都是 -11? 在这个程序中 short int 是两个字节啊。

加载中
1
lwdxinghuo
lwdxinghuo
补码:
 has = 0X000A
~has = 0XFFF5

(int)has = 0XFFFF FFF5

原码:
(int)has = 0X8000 000B
也就是-11
0
fromdtor
fromdtor
#include <stdio.h>
#include <stdlib.h>

int main()
{
    short int has = 10;
    char val =10 ;
    int a,b;
    
    has = ~has;
    val = ~val ;
    a=(unsigned short)has;
    b=(unsigned char)val;

    printf("%d",a);
    printf("%d",b);
    printf("%d",sizeof(short int));
    
    return 0;
}
符号扩展了
返回顶部
顶部