我正在阅读来自这个网站http://www.geeksforgeeks.org/little-and-big-endian-mystery/的小端和大端代表.
假设我们有一个数字0x01234567,那么在little endian中它存储为(67)(45)(23)(01),而在Big endian中它存储为(01)(23)(45)(67).
char *s= "ABCDEF"
int *p = (int *)s;
printf("%d",*(p+1)); // prints 17475 (value of DC)
Run Code Online (Sandbox Code Playgroud)
在上面的代码中看到打印值后,似乎字符串存储为(BA)(DC)(FE).
为什么它不像第一个例子那样从LSB存储到(MS)(CD)(AB)到MSB?我认为endianess意味着在多字节内排序字节.那么排序应该是关于"整个2字节",如第二种情况,而不是在那2个字节内吗?
是否在计算表达式之后或在评估整个语句之后评估后缀增量/减量运算符?
#include<stdio.h>
void main()
{
int a=0;
int b=0;
printf("%d %d",a||b,b++); // Output is 1 0
}
Run Code Online (Sandbox Code Playgroud)
我的编译器从右到左评估printf参数.表达式a || b的答案是1,这意味着b在评估|| b之前已经递增(即b在评估表达式b ++之后立即递增)
我在这里阅读C++中的增量 - 何时使用x ++或++ x?在整个语句之后计算后缀增量/减量.
哪个是对的?
c parameter-passing expression-evaluation operator-precedence