关于C语言操作符的一些笔记

取反~

int a=0;

printf("%d\n",~a);

000000000000000000000000000000000

111111111111111111111111111111111 - 补码

111111111111111111111111111111110 - 反码(补码-1)

100000000000000000000000000000001 - 原码(反码取反,符号位不变)

打印出来的是原码,存储在内存的是补码。

int main()
{
    short s=0;
    int a=10;
    printf("%d\n",sizeof(s=a+5));
    printf("%d\n",s);
    return 0;
}

结果是2和0。

原因:sizeof计算内存大小。但sizeof里面的表达式并不会计算。

#include<stdio.h>
int main()
{
    int i=0,a=0,b=2,c=3,d=4;
    i=a++&&++b&&d++;
    printf("a=%d\n,b=%d\n,c=%d\n,d=%d\n",a,b,c,d);
    return 0;
}

结果 1,2,3,4

i=a++ 为0,假,不继续执行后面的语句。

#include<stdio.h>
int main()
{
    int i=0,a=1,b=2,c=3,d=4;
    i=a++||++b||d++;
    printf("a=%d\n,b=%d\n,c=%d\n,d=%d\n",a,b,c,d);
    return 0;
}

结果 2,2,3,4

i=a++ 为1,为真,不继续执行后面的语句。

隐式类型转换

整形提升(计算时数据变成int型)

#include<stdio.h>
int main()
{
    char a=3;
    //00000011 - a
    //00000000000000000000000000000011
    char b=127;
    //01111111 - b
    //00000000000000000000000001111111
    
    //a与b相加
    //00000000000000000000000000000011
    //00000000000000000000000001111111
    //相加
    //00000000000000000000000010000010
    //截断
    //10000010
    
    char c=a+b;
    //10000010
    //11111111111111111111111110000010 - 补码
    //11111111111111111111111110000001 - 反码
    //10000000000000000000000001111110 - 原码
    printf("%d\n",c);
    return 0;

#include<stdio.h>
int main()
{
    char a = 0xb6;
    short b = 0xb600;
    int c = 0xb6000000;
    if(a==0xb6)
    printf("a");
    if(b==0xb600)
    printf("b");
    if(c==0xb6000000)
    printf("c");
    return 0;
}

结果为c。==也算是一种运算。

#include<stdio.h>
int main()
{
    char c = 1;
    printf("%u\n", sizeof(c));
    printf("%u\n", sizeof(+c));
    printf("%u\n", sizeof(-c));
    return 0;
}

结果为1 4 1 。+c让c变成了从char的一个字节变成了四个字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值