当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 15 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题]C下的二进制问题
帖子发表于 : 2007-04-22 9:18 

注册: 2007-04-22 9:09
帖子: 45
送出感谢: 0 次
接收感谢: 0 次
小弟在最近的程序中需要对二进制进行操作,比如,对28位的二进制进行移位,这个28BIT着实让我伤透!!本来想用汇编来解决,但,各位知道它的移植问题,所以放弃.有人能告诉我在C中用"位"(BIT)来进行操作吗?比如一个字符"C",怎么变换成一串可操作的八位的二进制?


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-04-22 11:55 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
xxx <<4
就是移位啊。
28位的二进制,不清楚你是怎么定义的,是要求对一个28位的二进制操作,还是有一个28位的二进制的字符串?

4字节就是32位,定义一个4字节的unsigned long DW,(DW&0x0fffffff)<<4。哎,你的移位也没说清楚。


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 : Re: [问题]C下的二进制问题
帖子发表于 : 2007-04-22 12:32 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
黄黄 写道:
小弟在最近的程序中需要对二进制进行操作,比如,对28位的二进制进行移位,这个28BIT着实让我伤透!!本来想用汇编来解决,但,各位知道它的移植问题,所以放弃.有人能告诉我在C中用"位"(BIT)来进行操作吗?比如一个字符"C",怎么变换成一串可操作的八位的二进制?


左移跟无符号乘2效果上几乎一样


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-04-24 18:46 

注册: 2007-04-22 9:09
帖子: 45
送出感谢: 0 次
接收感谢: 0 次
不好意思,28位就是指一个28位的数据,但不知道在C里面要怎么定义出来.


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-04-24 19:07 
头像

注册: 2005-10-19 17:33
帖子: 2052
送出感谢: 0 次
接收感谢: 0 次
你无法定义出一个28位的数据,因为计算机里面,字节是原子单位,你所能得到的只能是24或者32位,如果你只用28位,那么
要么你定义32位,最后一个字节的高四位或者低四位不用
要么,你在磁盘上存的时候做点处理,前一个结构和后一个结构可以共用一个字节,也就是说,两个结构总共是56位,7个字节,取的时候,稍微处理一下就好了,节省点空间 ,多点麻烦

最后,你说的28位不28位,一和C无关,二和汇编无关,除非你的cpu是奇怪的28位cpu,反正我没有听说过


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-04-25 20:58 

注册: 2007-04-22 9:09
帖子: 45
送出感谢: 0 次
接收感谢: 0 次
谢谢,是我表达有误,我指的28位是指我要处理的数据是一个28位的.至于你说的共用字节能不能说得详细一点?我不太明白,呵呵


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-04-25 21:25 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
unsigned long i:28;
不是每种编译器都支持而已。


_________________
● 鸣学


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2007-04-25 22:18 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
黄黄 写道:
谢谢,是我表达有误,我指的28位是指我要处理的数据是一个28位的.至于你说的共用字节能不能说得详细一点?我不太明白,呵呵


那就用32位(long)
最高4位无视


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2007-04-26 17:49 
头像

注册: 2006-06-06 22:56
帖子: 80
送出感谢: 0 次
接收感谢: 0 次
struct {
unsigned i: 28;
} t;

ANSI C 支持
gcc 下可以用

这样 t.i 就是一个28位的二进制数


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2007-04-26 19:40 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
diabloneo 写道:
struct {
unsigned i: 28;
} t;

ANSI C 支持
gcc 下可以用

这样 t.i 就是一个28位的二进制数


你这个是位域语法吧....可不可以不用struct包着,而且作算数运算会不会有限制?


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2007-04-27 12:56 

注册: 2007-04-22 9:09
帖子: 45
送出感谢: 0 次
接收感谢: 0 次
谭浩强的C语言书里有一节<<位段>>,里面讲到了这一部分内容.


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2007-04-27 13:21 
头像

注册: 2005-10-19 17:33
帖子: 2052
送出感谢: 0 次
接收感谢: 0 次
diabloneo 写道:
struct {
unsigned i: 28;
} t;

ANSI C 支持
gcc 下可以用

这样 t.i 就是一个28位的二进制数


实际上和使用32位没有什么区别


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2007-04-27 13:27 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
猛将兄 写道:
diabloneo 写道:
struct {
unsigned i: 28;
} t;

ANSI C 支持
gcc 下可以用

这样 t.i 就是一个28位的二进制数


实际上和使用32位没有什么区别


实际上struct t 还是占32位..


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
14 楼 
 文章标题 :
帖子发表于 : 2007-04-27 13:31 
头像

注册: 2005-08-15 0:04
帖子: 1880
地址: 南7技校
送出感谢: 0 次
接收感谢: 0 次
为了对齐?


_________________
飞得高,飞得低,学习再学习,多少大秘密!
http://zhan.blog.ubuntu.org.cn


页首
 用户资料  
 
15 楼 
 文章标题 :
帖子发表于 : 2007-04-27 13:35 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
zhan 写道:
为了对齐?

不是...因为一个字节是8个位


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 15 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译