C语言 低4位全为1 什么意思?

来源:百度知道 编辑:UC知道 时间:2024/06/22 01:05:26
设一个低4位全为1、其余全为0的数~(~0<<4)

这句话表示什么意思呢?

~(~0<<4) 怎么解释呢??

新手 越通俗越好
void main()
{
unsigned int a,b,c,d;
scanf("%o",&a);
b=a>>4;c=~(~0<<4);d=b&c;
printf("a=%#o\nd=%#o\n",a,d);
}

d=b&c; b和c进行或运算 如入 331(八进制是513) 结果是
a=0331---------------不应该是0000331吗?

d=015----------------不知道怎么来的 ?

0…01111

这句话的执行顺序:~((~0)<<4)

0先取反,就变成了全是1的一个数,若当作signed int 打印出来就是-1。

全是1的一个数 左移4位后, 底四位补上0,高四位的1溢出。

然后再取反,就是一个只有低四位为1的数了,signed int打印出来应该是15

或者你用(unsigned int)-1 - 15, 和~(~0<<4)是一样的

将0(用8bit表示是00000000)先取反,变成11111111,左移4位后为11110000,对该数再取反为00001111。就是低四位全1,其余为0.