大/小端字节序 原码反码补码 有符号整型无符号整形 相关例题

简介: 大/小端字节序 原码反码补码 有符号整型无符号整形 相关例题
#define _CRT_SECURE_NO_WARNINGS 1 
//int main()
//{
//    int a = -10;
//    int b = 10;
//    //  a           00000000000000000000000000001010(-10原码)
//    //              11111111111111111111111111110101(-10反码)
//    //在内存中存储为11111111111111111111111111110110(-10补码)
//    //十六进制形式为FFFFFF6-----实际为6FFFFFFF(四个字节)
//    //b             00000000000000000000000000001010(10原码)
//    //              11111111111111111111111111110101(10反码)
//    //在内存中存储为11111111111111111111111111110110(10补码)
//    //十六进制形式为000000a-----实际为a0000000(四个字节)
//    return 0;
//}
//大端字节序:把数据的低位字节序的内容存放在高地址处,高位字节序的内容存放在低地址处
//如int a=0x11223344(11为高地址,44为低地址)        地址由低到高为11223344(大端正着存)
//小端字节序:把数据的高位字节序的内容存放在高地址处,低位字节序的内容存放在低地址处
//如int a=0x11223344(11为高地址,44为低地址)        地址由低到高为44332211(小端正着存)
//在计算机中,以字节为单位,每个地址单元都对应一个字节(8bit),除了8bit的char,还有16bit的short  32bit的long
//请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序(出自百度2015年系统工程师笔试题)
#include<stdio.h>
//int main()
//{
//    int a = 1;
//    char* p = (char*) & a;//将a的二进制地址传给p,*p解引用,&a是int型,需要强制类型转换成char型
//    if (*p == 1)
//    {
//        printf("小端\n");
//    }
//    else
//    {
//        printf("大端\n");
//    }
//    return 0;
//}
//自定义函数,并用函数实现
//int check_sys()
//{
//    int a = 1;
//    char* p = (char*)&a;//将a的地址传给p并解引用,并用char类型检查第一个字节的值,需要强制转换a为p
//    //if (*p == 1)
//    //{
//    //    return 1;
//    //}
//    //else
//    //{
//    //    return 0;
//    //}
//    return*p;//返回1表示小端,返回0表示大端
//}
//int main()
//{
//    int a = 1;
//    int ret = check_sys();
//    if (ret == 1)
//    {
//        printf("小端\n");
//    }
//    else
//    {
//        printf("大端\n");
//    }
//    return 0;
//}
//输出结果是?
//#include<stdio.h>
//int main()
//{
//    char a = -1;
//    signed char b = -1;
//    unsigned char c = -1;
//    printf("a=%d\nb=%d\nc=%d\n", a, b, c);
//    //打印结果为-1 -1 255
//    //a中
//    //-1的原码为10000000000000000000000000000000001
//    //-1的反码为11111111111111111111111111111111110
//    //-1的补码为11111111111111111111111111111111111
//    //char型只能存一个字节(8个bit),11111111(高位是符号位)
//    // 整型提升(有符号位)提升补1
//    //          11111111111111111111111111111111111(-1)
//    //b中
//    //-1char型为11111111(高位是符号位)整型提升(有符号位)提升补1
//    //          11111111111111111111111111111111111(-1)
//    //c中     
//    //-1char型是11111111(高位表示符号位)
//    //无符号位整型提升补0
//    //变为      00000000000000000000000000001111111(为255,补码)(正数的原码反码补码相同,所以也是原码)
//    return 0;
//}
#include<stdio.h>
//int main()
//{
//    char a = -128;
//    //10000000000000000000000010000000(原码)
//    //11111111111111111111111101111111(反码)
//    //11111111111111111111111110000000(补码)
//    //char型,只能存1字节,8bit,即10000000(-128)(有符号char型,高位补1),补后为11111111111111111111111110000000
//    //%u是无符号整形,此时的第一位的1表示符号位,是正数,所以原码和补码相同
//    printf("%u\n", a);
//    return 0;
//}
//int main()
//{
//    char a = 128;
//    printf("%u\n", a);//
//    //00000000000000000000000010000000(128原码,原反补相同)
//    //10000000(char型取前七位),而char型为有符号型,第一位为1,为负,整型提升时,补1
//    //11111111111111111111111100000000
//    //
//    return 0;
//}
//char(有符号)在内存中类型的范围(0~127~~~~~-1~-128)
//00000000(正数)~~~~~~01111111~~~~10000000~10000001~~~~11111111(负数)的补码是(取反加一或先减一后取反两种方法)
// (定义:10000000的补码是-128)-128~~-127(11111111)~(-1)100000001
//0~127~~~~~~~~
int main()
{
    int i = -20;
    //1000000000000000000000010100(-10的原码)
    //1111111111111111111111101011(反码)
    //1111111111111111111111101100(补码)(计算机存的是补码)
    unsigned int j = 10;
    //0000000000000000000000001010(正整数的原码反码补码相同)(计算机存的是补码)
    printf("%d\n", i + j);//打印结果为-10
    //1111111111111111111111101100
    //0000000000000000000000001010
    //1111111111111111111111110110--补码(%d打印的是有符号整形的原码)------(无符号整形是遵循原数最高位为1时,全部补1,为0时全补0)
    //1111111111111111111111110101--反码
    //1000000000000000000000001010--原码 (-10)
    return 0;
}
目录
打赏
0
0
0
0
11
分享
相关文章
第二次笔记: 无符号整数的表示和运算 有符号整数的表示和运算 原码 补码 反码 移码
第二次笔记: 无符号整数的表示和运算 有符号整数的表示和运算 原码 补码 反码 移码
337 0
第二次笔记: 无符号整数的表示和运算 有符号整数的表示和运算 原码 补码 反码 移码
进制及进制转换详解。原码、反码、移码,补码区别介绍。(通俗易懂)
Ⅰ.进制转换详解。Ⅱ.原码、反码、移码,补码区别介绍。(通俗易懂)
439 0
进制及进制转换详解。原码、反码、移码,补码区别介绍。(通俗易懂)
数制间的转换,原码、反码、补码
数制间的转换,原码、反码、补码
925 0
数制间的转换,原码、反码、补码
位级补码无符号数
总结下: w位无符号数存储范围: 0~2(w) - 1 w位补码数存储范围: -2(w - 1) ~ 2(w - 1) - 1 补码转无符号数: x > 0 时  X补码即是无符号编码 x < 0时   X补码转无符号数为x + 2(w) 无符号数转补码: 当u =< TMax,w    无符号u...
1454 0
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)
1009 十进制整数的反码 leetcode
1009 十进制整数的反码 leetcode
120 0
二进制、八进制、十进制、十六进制互转,原码、补码、反码知识
二进制、八进制、十进制、十六进制互转,原码、补码、反码知识
二进制、八进制、十进制、十六进制互转,原码、补码、反码知识
进制转换、原码、反码、补码及位运算详解
进制转换、原码、反码、补码及位运算的简单示例
773 1
进制转换、原码、反码、补码及位运算详解