【发布时间】:2013-02-16 01:47:05
【问题描述】:
我有一个短整数,即 2 个字节,但我只想将左字节输出到文件。我该怎么做呢?我正在使用二进制函数 open()、read()、write() 等。
我也想把右边的字节左移8次,这样右边的字节占据左边,右边已经清零了。
对于没有展示我已经尝试过的内容,我深表歉意——我是 C 菜鸟,找不到任何关于如何做到这一点的信息。
【问题讨论】:
-
你需要尝试一下...
-
阅读位运算符,并实验!您还应该记住,值的“左”和“右”在很大程度上取决于底层平台(请参阅endianess)。
-
查看graphics.stanford.edu/~seander/bithacks.html 以获得一些灵感。但是永远不要忘记,偶尔花费几微秒的执行时间比一个下午挠头的代价要少得多,因为您不再了解代码是如何工作的。编写完成这项工作的最简单的代码,检查它是否符合标准(您的编译器和机器将改变!)。只有当 measurements 显示它是值得的,并且编译器不会自己做时才开始烦躁。组织和算法应该是您审查的首要目标。
-
没有。一个短整数是
sizeof (short int)字节。该值不能保证为 2。有些系统的 sizeof (short int) == 1。@JoachimPileborg:鼓励关于转移负整数的实验是愚蠢的。左移负值是未定义的行为,右移可能会导致陷阱表示或异常情况,根据 6.2.6.1p5 和 6.5p5 也会导致未定义的行为。