在zsh下缺少换行符输出

最近写程序时发现,在zsh下无换行输出时会输出%。来看一个例子:

printf "hello"

以上代码将输出hello%

Advertisements

大端与小端

大小端法简介

在计算机科学中,大端与小端指的是程序对象的字节在存储器中排列的顺序。大端法(big endian)首先存储高位字节,然后是次高位字节,以此类推,最后存储低位字节。小端法(little endian)跟大端法刚好相反,即首先存储低位字节,然后是次低位字节,以此类推,最后是高位字节。

假设现在有一个程序对象,其类型为int,位于地址0x100处,其十六进制值为0x01234567。在大端法和小端法下,其字节排列示意图如下:

大端法:

0x100    0x101    0x102    0x103
 01       23       45       67  

小端法:

0x100    0x101    0x102    0x103
 67       45       23       12

由上述示意图可看出,在小端法中,地址增长的顺序与对象字节从低到高一致,而在大端法中刚好相反,或者说在大端法中地址增长的顺序与字节书写顺序一致。

判断一台计算机采用小端法还是大端法

理解了大小端的概念就很容易写一个c/c++程序来判断端序。

判断机器端序的c++程序:

#include <iostream>

static union {
  char c[4];
  unsigned long l;
} endian_test = {{'l', '?', '?', 'b'}};

#define ENDIANNESS ((char)endian_test.l)

void checkSystem() {
  if ('b' == ENDIANNESS) {
    std::cout << "Big endian\n";
  } else {
    std::cout << "Little endian\n";
  }
}

int main(int argc, char const *argv[])
{
  checkSystem();
  return 0;
}

输出结果:

Little endian