右侧
国内最专业的黑客技术博客
当前位置:网站首页 > 黑客教程 > 正文

c++读取数字_c语言读取指定位置的数字

作者:hacker发布时间:2022-12-28分类:黑客教程浏览:150评论:5


导读:目录:1、C语言里如何读取8位数据的某一位2、用c语言编程实现从一个数中选出某一位上的数字3、如何用C语言获取某一位的值4、c语言中如何提取二进制数中的某一位?...

目录:

C语言里如何读取8位数据的某一位

你要读哪3位?

连着一起的3位,还是独立的3位

连一起: (val(0x07n))n

0-2: (val0x07)0

1-3: (val0x0e)1

2-4: (val0x1c)2

3-5: (val0x38)3

4-6: (val0x70)4

5-7L (val0xe0)5

单独第n位:

(val(0x1n))n

用c语言编程实现从一个数中选出某一位上的数字

#includestdio.h

#includestring.h

#includestdlib.h

void main()

{

int n,m;

char numstring[20];

printf("请输入数值,以及目标位:\n");

scanf("%d%d",n,m);

itoa(n,numstring,10);

printf("%d的第%d位数字是%c\n",n,m,numstring[strlen(numstring-m)]);

}

如何用C语言获取某一位的值

以获得第一位为例:

unsigned short nTarget; //nTarget为目标数值

unsigned short nSetBit = 0x0001;

unsigned short nTempVal = nTarget nSetBit; //nTempVal就是第一位的值

c语言中如何提取二进制数中的某一位?

下面是三种方式:

①通过模2除2(%2、/2)的方法

num%2——取出二进制的最后一位

num/2——右移去掉二进制的最后一位

通过while循环,依次取出二进制的最后一位数字判断是否为1,若为1则count++,while(num)只有当num变为0时循环结束。

问题:在测试-1出现bug,-1的二进制中应该有32个1,输出却为0。我们将-1带入代码中发现-1%2=0,count不增,然后-1/2=0,循环结束,故输出count的值为0。

解决方案:将变量num的数据类型改为unsigned int (无符号整型),此时表示的是正的整型的最大值,所以当num=-1时,表示二进制为32个1的正数,通过循环可以输出正确的个数。

②通过右移操作符()、按位与操作符()实现

Example:当num=10(1010),通过右移操作numi,二进制向右移动i位。

//i=0,num0,右移0位,此时(1010)(0001)=0

//i=1,num1,右移1位,此时(0101)(0001)=1,count++

//i=2,num2,右移2位,此时(0010)(0001)=0

//i=3,num3,右移3位,此时(0001)(0001)=1,count++

……

因为二进制共32位,所以循环要执行32次后结束,得到count为2。

缺点:不够高效,必须循环32次。

③通过按位与操作符()巧妙运算实现

Example:  当num=15时,

1//num(num-1)=(1111)(1110)=(1110)  

2//num(num-1)=(1110)(1101)=(1100)

3//num(num-1)=(1100)(1011)=(1000)

4//num(num-1)=(1000)(0111)=0  ,循环停止。共执行4次while循环。

扩展资料

一、指定的某一位数置1

宏 #define setbit(x,y)  x|=(1y)

二、指定的某一位数置0

宏  #define clrbit(x,y)  x=~(1y)

三、指定的某一位数取反

宏  #define reversebit(x,y)  x^=(1y)

四、获取的某一位的值

宏 #define getbit(x,y)   ((x) (y)1)

怎么用C语言获取某一位的值

int d,x,n;

scanf("%d%d",x);

n=(x (1d))0;

printf("%d的第%d位是%d\n",x,d,n);

标签:c语言读取指定位置的数字


已有5位网友发表了看法:

  • 访客

    访客  评论于 2022-12-29 06:22:15  回复

    法num%2——取出二进制的最后一位num/2——右移去掉二进制的最后一位通过while循环,依次取出二进制的最后一位数字判断是否为1,若为1则count++,while(num)只有当num变为0时循环结束。问题:在测试-1出现

  • 访客

    访客  评论于 2022-12-28 20:24:27  回复

    目录:1、C语言里如何读取8位数据的某一位2、用c语言编程实现从一个数中选出某一位上的数字3、如何用C语言获取某一位的值4、c语言中如何提取二进制数中的某一位?5、怎么用C语言获取某一位的值C语言里如何读取8位数据的某一位你要读哪3位?连着一起的3位,还是独

  • 访客

    访客  评论于 2022-12-28 23:22:38  回复

    目标数值unsigned short nSetBit = 0x0001; unsigned short nTempVal = nTarget nSetBit; //nTempVal就是第一位的值c语言中如何提取二进制数中的某一位?下面是三种方式:①通过模2除2(%2、

  • 访客

    访客  评论于 2022-12-29 01:39:49  回复

    现从一个数中选出某一位上的数字#includestdio.h#includestring.h#includestdlib.hvoid main(){int n,m;char numstring[20];printf("请输入数值,以及目标位:\n");scanf("

  • 访客

    访客  评论于 2022-12-28 19:37:09  回复

    目录:1、C语言里如何读取8位数据的某一位2、用c语言编程实现从一个数中选出某一位上的数字3、如何用C语言获取某一位的值4、c语言中如何提取二进制数中的某一位?5、怎么用C语言获取某一位的值C语言里如何读取8位数据的某一位你

欢迎 发表评论:

黑客教程排行
最近发表
标签列表