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

简介: 大/小端字节序 原码反码补码 有符号整型无符号整形 相关例题
#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;
}
相关文章
|
6月前
|
存储 编译器 C语言
【C语言】数据的存储(基本类型介绍、原码、反码、补码详解、大小端的理解、浮点数的存储规则)
【C语言】数据的存储(基本类型介绍、原码、反码、补码详解、大小端的理解、浮点数的存储规则)
86 0
|
6月前
|
存储 编译器 C语言
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)
|
6月前
|
存储 编译器 C语言
什么?整形家族在内存中存的不是原码而是补码???
什么?整形家族在内存中存的不是原码而是补码???
|
6月前
|
存储 编译器 C语言
C语言:进制转换以及原码、反码、补码
C语言:进制转换以及原码、反码、补码
155 0
|
6月前
|
存储
进制转换和整型提升
进制转换和整型提升
|
存储 IDE Java
二进制到汇编:进制,原码反码补码,位运算,通用寄存器,内存一套打通
二进制到汇编:进制,原码反码补码,位运算,通用寄存器,内存一套打通
172 1
单目操作符(含原码反码补码转换)
单目操作符(含原码反码补码转换)
|
机器学习/深度学习 存储
进制及进制转换详解。原码、反码、移码,补码区别介绍。(通俗易懂)
Ⅰ.进制转换详解。Ⅱ.原码、反码、移码,补码区别介绍。(通俗易懂)
370 0
进制及进制转换详解。原码、反码、移码,补码区别介绍。(通俗易懂)
|
IDE 开发工具
什么是进制中的低位、高位
什么是进制中的低位、高位