| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1306 人关注过本帖
标题:CSDN, 我进去看一次就吐一次, 哈哈
取消只看楼主 加入收藏
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
结帖率:94.72%
收藏
已结贴  问题点数:20 回复次数:7 
CSDN, 我进去看一次就吐一次, 哈哈
题目:
怎样生成一个字节,可以记录一布尔值
比如
01111100,
读取后输出为:
a是0
b是1
c是1
d是1
e是1
f是1
g是0
h是0


[ 本帖最后由 BlueGuy 于 2010-9-24 10:50 编辑 ]
搜索更多相关主题的帖子: CSDN 
2010-09-24 10:48
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

#include <stdio.h>

union ucb {
    struct cb_bits {
        unsigned char b0:1;
        unsigned char b1:1;
        unsigned char b2:1;
        unsigned char b3:1;
        unsigned char b4:1;
        unsigned char b5:1;
        unsigned char b6:1;
        unsigned char b7:1;
    } cb_bits;
    unsigned char cb_byte;
#define cb_bit0    cb_bits.b0
#define cb_bit1    cb_bits.b1
#define cb_bit2    cb_bits.b2
#define cb_bit3    cb_bits.b3
#define cb_bit4    cb_bits.b4
#define cb_bit5    cb_bits.b5
#define cb_bit6    cb_bits.b6
#define cb_bit7    cb_bits.b7
};

int main(void)
{
    union ucb ucb;

    ucb.cb_byte = 0x7c;

    printf("%d", ucb.cb_bit7);
    printf("%d", ucb.cb_bit6);
    printf("%d", ucb.cb_bit5);
    printf("%d", ucb.cb_bit4);
    printf("%d", ucb.cb_bit3);
    printf("%d", ucb.cb_bit2);
    printf("%d", ucb.cb_bit1);
    printf("%d", ucb.cb_bit0);
    printf("\n");

    printf("0x%02x\n", ucb.cb_byte);

    ucb.cb_bit7 = 1;
    printf("%d", ucb.cb_bit7);
    printf("%d", ucb.cb_bit6);
    printf("%d", ucb.cb_bit5);
    printf("%d", ucb.cb_bit4);
    printf("%d", ucb.cb_bit3);
    printf("%d", ucb.cb_bit2);
    printf("%d", ucb.cb_bit1);
    printf("%d", ucb.cb_bit0);
    printf("\n");

    printf("0x%02x\n", ucb.cb_byte);
    return 0;
}

我就是真命天子,顺我者生,逆我者死!
2010-09-24 10:49
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
const static unsigned int bits[] = {0x80, 0x40, 0x20, 0x10, 8, 4, 2, 1};
char a = 0X3C;
for (j = 0; j < 8; j++) {
{
   if (a & bits[j%8])
       printf("%d", 1);
   else
       printf("%d", 0);
}

我就是真命天子,顺我者生,逆我者死!
2010-09-24 11:01
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
冒泡和选择排序该被踢出教材了
实用排序算法(复杂度小于等于O(n^2))中效率最低但实现并不是最简单的的两个,C、C++教材却总喜欢拿来大讲特讲,非常不利于初学者养成“程序效率”的思维。

实际上,各种排序算法里,除了堆排序实现较为复杂外,从代码量的角度,大多数算法都不比冒泡、选择算法复杂多少。

举几个高速的排序算法的例子,这些才适合进入教材

鸽巢排序,排序字节串、宽字节串最快的排序算法,计数排序的变种(将计数缓冲区大小固定,少一次遍历开销),速度是STL中std::sort的20多倍,更重要的是实现极其简单!缺点是需要一个size至少等于待排序数组取值范围的缓冲区,不适合int等大范围数据


[ 本帖最后由 BlueGuy 于 2010-9-24 11:05 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-09-24 11:04
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 7楼 hahayezhe
我本想在那个帖子里回复你一次的, 想想还是算了,
以下是引用真我在2010-9-23 22:42:55的发言:

/*******************************/
不带你这样玩的,这样更累
你都不懂就乱评价!
程序代码:
#define PIG_NUMBER_ONE(a,b,c) printf("%d%d%d\n",a,b,c);
#define PIG_NUMBER_TWO(a,b,c) PIG_NUMBER_ONE(a,b,c)\
    PIG_NUMBER_ONE(a,c,b)\
    PIG_NUMBER_ONE(b,a,c)\
    PIG_NUMBER_ONE(b,c,a)\
    PIG_NUMBER_ONE(c,b,a)\
    PIG_NUMBER_ONE(c,a,b)
#define PIG_NUMBER_THREE(a,b) PIG_NUMBER_ONE(a,a,b)\
    PIG_NUMBER_ONE(a,b,a)\
    PIG_NUMBER_ONE(b,a,a)
int main(){   
    for(unsigned int a=0;a<10;a++){
        if(a==3)
            continue;
        for(unsigned int b=a;b<10;b++){
            if(b==3&&b==0)
                continue;
            if((a+b)%3==0){
                PIG_NUMBER_TWO(3,b,a)
            }
        }
    }
    PIG_NUMBER_THREE(0,3)
    PIG_NUMBER_THREE(3,6)
    PIG_NUMBER_THREE(3,9)
    PIG_NUMBER_ONE(3,3,3)
    return 0;
}

你这代码也够漂亮的,

我就是真命天子,顺我者生,逆我者死!
2010-09-24 11:16
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
但是他的代码可以做到提取int ,等其他多字节的类型
// 这句我不想多做解释。

我可以直接用他那个联合体指针取单bit位,
你的虽然简单,但是提取时避免不了与运算
而且在提取没有他来的更直接,更通用!
//
也许吧,各有各的审美观。

我就是真命天子,顺我者生,逆我者死!
2010-09-24 11:25
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
对于一个int a;我提取每个bit位
你的需要一个中间 char *c=(char *)&a
然后再拿c与bits[] 操作
//
你在说笑吧?
const static unsigned int bits[32] = {...0x80, 0x40, 0x20, 0x10, 8, 4, 2, 1};
int a = ?;
for (j = 0; j < 32; j++) {
{
   if (a & bits[j%32])
       printf("%d", 1);
   else
       printf("%d", 0);
}

我就是真命天子,顺我者生,逆我者死!
2010-09-24 14:32
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
行吧,学习了。
这题实用性很强的,点阵字体就是按照这种方式 "生成一个字节,可以记录一布尔值" 存储的。

我就是真命天子,顺我者生,逆我者死!
2010-09-24 15:36
快速回复:CSDN, 我进去看一次就吐一次, 哈哈
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018958 second(s), 9 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved