二进制数的小数点二进制转十进制向右移n位,则其值扩大多少倍

请问各位怎么获取二进制第几位的值?【c++吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:295,158贴子:
请问各位怎么获取二进制第几位的值?收藏
比如有个二进制数,1100那么第0位为0:1位为0;2位,3位为1请教大家怎么样去写个函数实现输入第几位,输出二进制第几位的数使用基本一些函数及位运算完成
c++培训课程,美国上市公司&达内&出品c++课程,15年教学经验,总监级c++讲师亲授!!达内首创&先就业后付款&模式.名企项目总监授课,成就&稀缺级&c/c++软件工程师
位运算或bitset
第n位的值: (x&&n) & 1写第n位为a: x^=(x&(1&&n)) ^ (a&&n)
去看msdn C++ Referrence
哈哈,明白了,谢谢
2L的方法也可以
登录百度帐号推荐应用下次自动登录
现在的位置:
& 综合 & 正文
编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端再移入)n(二进制)位后所得到的值。
Answer Book
第一种解法 是 每次将x最右端右移1位 与 该位移到最左端
进行或运算 ,这样进行n次循环即可。
/*rightrot: rotate x to the right by n position*/
unsigned rightrot(unsigned x, int n)
int wordlength(void);
/* rightmost bit*/
while(n-- & 0)
rbit = (x & 1) && (wordlength() - 1);
x = x && 1;
/* 计算出运行程序的计算机所使用的字长 */
int wordlength(void)
unsigned v = (unsigned) ~0;
for(i = 1; (v = v && 1) & 0; ++i)
2.第二种解法
int wordlength(void)
unsigned v = (unsigned) ~0;
for(i = 1; (v = v && 1) & 0; ++i)
3. 这种方法 比较简练
判断 x 中最右端位是1还是0,是1就进行运算,若是0 ,直接右移即可。
unsigned rightrot(unsigned x, unsigned n)
while (n & 0)
if ((x & 1) == 1)
//如果最右端位为 1
x = (x && 1) | ~(~0U && 1);
~(~0 && n)将最高n位 置1
x = (x && 1);
unsigned int rightrot(unsigned int x, unsigned int n)
/* calculate number of bits in type */
size_t s = sizeof(x) * CHAR_BIT;
/* limit shift to range 0 - (s - 1) */
/* if either is zero then the original value is unchanged */
if((0 == x) || (0 == p))
return (x && p) | (x && (s - p));
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 二进制有小数点吗 的文章

 

随机推荐