c++中的BYTE类型是什么?

projoy 2009-08-31 11:08:43
编程之美有一段
问题:对于一个字节(8bit)的无符号整型变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能的高.
int Count(BYTE x)
{
int num=0;
while(x){
if(x%2==1){
num++;
}
x/=2;
}
return num;
}

其中的BYTE是什么?
...全文
50212 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
tulipcaicai 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bfzhao 的回复:]

八字节的无符号字符型
[/Quote]

++
steadevil 2009-09-08
  • 打赏
  • 举报
回复
只要是整形就可以~~~
wuda00001 2009-09-08
  • 打赏
  • 举报
回复
TYPE的汉语翻译就是类型。他在程序只是一个代名词,可以是char(字符),string(字符串),int(整型),double(浮点双精度),long(长整型),float(浮点型)等,你看函数的定义是什么类型的,就相应的把TYPE改成相应的类型。··在C语言程序中他是不出现的···
信念 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ttklboy 的回复:]
话说你写的Count有个效率更高的写法
size_t Count(BYTE x){
    size_t val(0);
    while( x&=(x-1) ){
        ++val;
    }
    return val;
}
[/Quote]
经测试,少一个1
ttklboy 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 prochsh 的回复:]
引用 17 楼 ttklboy 的回复:
话说你写的Count有个效率更高的写法
size_t Count(BYTE x){
    size_t val(0);
    while( x&=(x-1) ){
         ++val;
    }
    return val;
}

经测试,少一个1
[/Quote]
是啊 我发过就发现错了 可不知道CSDN有个不能超过三次连续回贴 所以刚才发不上去
size_t Count(BYTE x){
size_t val(0);
if(!x)
return 0;
do{
++val;
}while( x&=(x-1) );
return val;
}

zhouqiang312 2009-09-03
  • 打赏
  • 举报
回复
你输入的“1”不等于1,而是49,因为BYTE的类型不是int而是char,typedef unsigned char BYTE;
改为typedef unsigned int BYTE;在输入你的1,2,3,4 ,结果是对的。
guoqing2009 2009-09-03
  • 打赏
  • 举报
回复
字节
ttklboy 2009-09-02
  • 打赏
  • 举报
回复

怎么老犯糊涂 上面的写错了 改一下
ttklboy 2009-09-02
  • 打赏
  • 举报
回复
话说你写的Count有个效率更高的写法
size_t Count(BYTE x){
size_t val(0);
while( x&=(x-1) ){
++val;
}
return val;
}
ttklboy 2009-09-02
  • 打赏
  • 举报
回复
是啊 BYTE是unsigned char 型,所以用cin给它赋值的时候保存的是该字符的ascii码值,你输入的1,2,3,4,5实际上上是49,50,51,52,53.所以出现你意料外的结果
crst_zh 2009-09-02
  • 打赏
  • 举报
回复
BYTE 就是 unsigned char
projoy 2009-09-02
  • 打赏
  • 举报
回复
我的疑问就是typedef unsigned char BYTE我这么用了可是为什么结果不对?代码如下

#include <iostream>
using namespace std;

typedef unsigned char BYTE;

int Count(BYTE x);

int main ()
{
BYTE a;
while (cin>>a) {
int k=Count(a);
cout<<k<<endl;
}
system("pause");
return 0;
}

int Count(BYTE x)
{
int num=0;
while (x) {
if (x%2==1) {
num++;
}
x/=2;
}
return num;
}




如输入
1
2
3
4
5
结果分别为
3
3
4
3
4
可是1的二进制表示为00000001,只有一个“1”呀
stjay 2009-09-01
  • 打赏
  • 举报
回复
TYPE
还有BYPE
stjay 2009-09-01
  • 打赏
  • 举报
回复
怎么扯到TYPE去了-.-
bfzhao 2009-09-01
  • 打赏
  • 举报
回复
八字节的无符号字符型
晨星 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 starcat 的回复:]
但是上次就有人这么问,而且言之凿凿
搞得我很心虚,以为C++真有这么个基本类型
[/Quote]
那可能是:
struct A { unsigned int a : 8; };
嘿嘿,其中的A::a是一个byte。
taodm 2009-09-01
  • 打赏
  • 举报
回复
建议楼主再多看点基础书后再来研究这本书吧。
leizhe 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bfzhao 的回复:]
八字节的无符号字符型
[/Quote]

BYTE 是windows 中的把
starcat 2009-08-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mstlq 的回复:]
unsigned int通常占4byte……
把它定义成BYTE?基本没人会那么干……
[/Quote]
但是上次就有人这么问,而且言之凿凿

搞得我很心虚,以为C++真有这么个基本类型
zbihong 2009-08-31
  • 打赏
  • 举报
回复
typedef unsigned char BYTE;
加载更多回复(5)

65,183

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧