使用“char”的布尔数组

使用“char”的布尔数组,第1张

概述我创建了一个实际上代表一个存储在char中的8个布尔数组的对象.我用它来学习更多关于按位运算符以及在C中创建自己的对象的内容.所以我有两个问题: >我是否可以确定以下代码 总是有效吗? >这是一个很好的实现 制作一个不会迷路的物体 在C中,除非你发布它 你自己. 代码: /* * IEFBooleanArray.h * IEFBooleanArray * * Created by i 我创建了一个实际上代表一个存储在char中的8个布尔数组的对象.我用它来学习更多关于按位运算符以及在C中创建自己的对象的内容.所以我有两个问题:

>我是否可以确定以下代码
总是有效吗?
>这是一个很好的实现
制作一个不会迷路的物体
在C中,除非你发布它
你自己.

代码:

/* *  IEFBooleanArray.h *  IEFBooleanArray * *  Created by IEf2 on 8/08/10. *  copyright 2010 IEf2. All rights reserved. * */#ifndef IEFBOolEANARRAY_H#define IEFBOolEANARRAY_H#include <stdlib.h>#include <string.h>#include <math.h>typedef char * IEFBooleanArrayRef;voID IEFBooleanArrayCreate(IEFBooleanArrayRef *ref);voID IEFBooleanArrayRelease(IEFBooleanArrayRef ref);int IEFBooleanArraySetBitAtIndex(IEFBooleanArrayRef ref,unsigned index,int flag);int IEFBooleanArrayGetBitAtIndex(IEFBooleanArrayRef ref,unsigned index);#endif
/* *  IEFBooleanArray.c *  IEFBooleanArray * *  Created by IEf2 on 8/08/10. *  copyright 2010 IEf2. All rights reserved. * */#include "IEFBooleanArray.h"voID IEFBooleanArrayCreate(IEFBooleanArrayRef *ref) {    IEFBooleanArrayRef newReference;    newReference = malloc(sizeof(char));    memset(newReference,sizeof(char));    *ref = newReference;}voID IEFBooleanArrayRelease(IEFBooleanArrayRef ref) {    free(ref);}int IEFBooleanArraySetBitAtIndex(IEFBooleanArrayRef ref,int flag) {    int orignalStatus;    if(index < 0 || index > 7)        return -1;    if(flag == 0)        flag = 0;    else        flag = 1;    orignalStatus = IEFBooleanArrayGetBitAtIndex(ref,index);    if(orignalStatus == 0 && flag == 1)        *ref = *ref + (int)pow(2,index);    else if(orignalStatus == 1 && flag == 0)        *ref = *ref - (int)pow(2,index);    return 0;}int IEFBooleanArrayGetBitAtIndex(IEFBooleanArrayRef ref,unsigned index) {    int result;    int value;    value = (int)pow(2,index);    result = value & *ref;    if(result == 0)        return 0;    else        return 1;}

我更像是一个Objective-C家伙,但我真的想更多地学习C语言.任何人都可以要求更多的“功课”,我可以提高自己吗?

谢谢,
IEf2

解决方法 pow(2,index)是产生位掩码的低效方法之一.我可以想象使用Ackermann函数可能会更糟,但pow()几乎是缓慢的.您应该使用(1<<索引).此外,C'ish设置/清除值的方式看起来不同.这是最近的一个问题:
> Simple way to set/unset an individual bit

如果你想以高效和便携的方式在C中使用munge,那么你真的应该看一下这个页面的位置,如果你以某种方式提到“位”,这里的每个人都会建议你:

> http://graphics.stanford.edu/~seander/bithacks.html

以下代码序列:

if(result == 0)        return 0;    else        return 1;

可以写成return(result!= 0);,返回resultor return !! result(如果结果应强制为0或1).虽然明确表达意图总是一个好主意,但大多数C程序员更喜欢“结果结果”.因为在C中这是使你的意图清晰的方法. if看起来很不对劲,就像一个警告标签上写着“原始开发人员是一个Java人并且不了解位数”或其他东西.

newReference = malloc(sizeof(char));memset(newReference,sizeof(char));

malloc memset(x,z)== calloc();

您有办法报告IEFBooleanArraySetBitAtIndex的错误(无效索引),但不报告IEFBooleanArrayGetBitAtIndex的错误.这是不一致的.使错误报告统一,或者您的库的用户将进行错误检查.

总结

以上是内存溢出为你收集整理的使用“char”的布尔数组全部内容,希望文章能够帮你解决使用“char”的布尔数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1222235.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存