原码
原码:[+1]0000 0001
原码:[-1]1000 0001
反码
·
原码:[+1]0000 0001
反码:0000 0001
·
原码:[-1]1000 0001
反码:1111 1110
补码
原码:[+1]0000 0001
反码:0000 0001
补码:0000 0001
原码:[-1]1000 0001
反码:1111 1110
补码:1111 1111
正整数取反+1就是对应负数的补码
二进制中,与1相&就保持原位,与0相&就为0
只要对应的二个二进位有一个为1时,结果位就为1,否则为0
当对应的二进位相异(不相同)时,结果为1,否则为0
~9 =-10
9
的原码:0000 0000 0000 0000 0000 1001
反码:1111 1111 1111 1111 1111 0110
知道补码求原码:
也是符号位不变,
其他各位取反+1
1111 1111 1111 1111 1111 0110
取反
1000 0000 0000 0000 0000 1001
+1
1000 0000 0000 0000 0000 1010 // -10
示例代码:十进制数按二进制格式输出
#include <stdio.h> void outputob(int num) { //1.计算整形所占比特位数 int len = sizeof(int)*8; //2.循环len次 for (int i = 0; i < len; i++) { //3.把传入的值右移 int a = num>>(len-i-1); //4.右移后按位与1得到该位的数值 int result = a&1; //5.输出 printf("%i", result); } printf("\n"); } int main(int argc, const char * argv[]) { outputob(5); return 0; }
int nums[5] = {[4] = 3,[1] = 2};
在内存中,内存从大到小进行寻址,为数组分配了存储空间后,数组的元素自然的从上往下排列 存储,整个数组的地址为首元素的地址。
char cs1[2] = {1, 2}; char cs2[3] = {3, 4, 5}; cs2[3] = 88; // 注意:这句访问到了不属于cs1的内存 printf("cs1[0] = %d\n", cs1[0] );
输出结果: 88
原文:http://www.cnblogs.com/wm-0818/p/5068598.html