C语言取一个数的最高位

Python063

C语言取一个数的最高位,第1张

#include <stdio.h>

int main()

{

    int num

    printf("input a num : ")

    scanf("%d", &num)

    if (num < 0)

        num = -num

    while (num > 10)

        num /= 10

    printf("highest order : %d\n", num)

    return 0

}

就你的问题说下,1个字节有8位(MSB->LSB)

记住:“保留某位就与1,去掉某位就与0”

取最高位,即保留MSB,则

&0x80

,就是“与上1000

0000”后七位全部被清掉了,只有和1相与的保留。

去掉高2位,只要&0x3F

,即“与上0011

1111”

去掉低2位,只要&0xFC

,即“与上1111

1100”

“C语言里怎样提取一个十六进制数的最高位?”具体解决方案如下:

解决方案1:

你是不是想这样/对于0x30,3是最高位,0是最低位?如果是的话那就这样办:首先不同类型处理方法不同,int型是2字节,伱可以这样最高为提

取,int a=b&0xf09(b为提取对象),最地位int

a=b&0x0f(b为提取对象),long型是4字节伱可以这样,long a=b&0xf000,long

a=b&0x000f还有什么再问

那稍加修改:int a=b&1000000000000000b,int

a=b&0000000000000001b,long

a=b&10000000000000000000000000000000b,int

a=b&00000000000000000000000000000001b这是2进制数的位操作,虽然看起来麻烦,但是效率最高,其他还有

方法,但是在单片机中不推荐

如果你学过汇

编这点很好理解,没学过也没事,我现在说给你听,这里提取取位用到的是c语言种的为操作,&(与操作)的定义是:1&1=1,1&

amp0=0,0&1=0,0&0=0,|(或操作)的定义是:1|1=1,1|0=1,0|1=1,0|0=0,所以要提取二进制中

的某一位,思想是保留那一位,其余为全为0,这样就&操作符就可以轻松做到,比如0011&0001=0001,提取最低位,0011&

amp1000=1000,提取最高位,还有就是在c语言里int型是2字节,long型是4字节

解决方案2:

楼主的意思应该a=0x30b=a>>7得到的b是0x30的最高位