这时候,我将char name[10]和int card的位置调换,结果用gdb的时候果然在name后面进行了填充,另外,gdb查看内存时要先x/31d 地址,才能x/32d 地址,不然会将多个字节串联
2018-11-29
我试了一下,我的struct有
int card 4字节,
char name[10],10字节
char school[15],15字节
按理说,name后面你应该填充两个字节,school填充一个字节,但实际上三个字节都填充再了school后面,这是我用gdb查出来的
int card 4字节,
char name[10],10字节
char school[15],15字节
按理说,name后面你应该填充两个字节,school填充一个字节,但实际上三个字节都填充再了school后面,这是我用gdb查出来的
2018-11-29
a&1为什么能判断奇偶性呢。
二进制只有最低位是奇数取值为1,其他位都是偶数(2^0 , 2^1, 2^2,或者你理解8421也可以)。 偶数+偶数=偶数这肯定不需要多说。奇数+偶数=奇数。二进制转十进制,就是各个取值相加。
所以我们看看1的8位二进制: 0000 0001。
所以当 a&1的时候是 1 表明最低位存在值,也就是1。而其他位置(2,4,8,16,32,64,128) 都是偶数,转为十进制的时候,其他位数相加都是偶数,如果存在最后一位,也就是要+1,那就会变成奇数,反之还是偶数。
二进制只有最低位是奇数取值为1,其他位都是偶数(2^0 , 2^1, 2^2,或者你理解8421也可以)。 偶数+偶数=偶数这肯定不需要多说。奇数+偶数=奇数。二进制转十进制,就是各个取值相加。
所以我们看看1的8位二进制: 0000 0001。
所以当 a&1的时候是 1 表明最低位存在值,也就是1。而其他位置(2,4,8,16,32,64,128) 都是偶数,转为十进制的时候,其他位数相加都是偶数,如果存在最后一位,也就是要+1,那就会变成奇数,反之还是偶数。
2018-11-02