是这个意思,这个内存地址开始的四个字节的内容(二进制)是:
10001100 00001010 00000010 00000000
因为 Intel 计算机存储数据是高位反序的,因此,实际的数值应该是将四个字节反过来:
00000000 00000010 00001010 10001100
转换为十进制就是 133772。
双字节即只考虑两个字节,即只看内存地址开始的两个字节:
10001100 00001010
反序之后得到:
00001010 10001100
转换为十进制就是 2700。
关于C语言位运算,赋值的问题,回答详细一点。为什么按位取反后输出的结果不一样?
先把23、2和5用二进制写出来,23的二进制表示为00010111,2为00000010,5为00000101,然后拿23的二进制和2的二进制进行或运算,(或的运算发则为1or1=1、1or0=1、0or1=1、0or0=0)所以得出23和2的或为00010111,然后再与5进行异或(异或的运算法则为1xor1=0、1xor0=1、0xor1=1、0xor0=0)所以得出最后结果是00010010,化成十进制就是18
2的二进制是00000010,取反得到11111101,最高位为1,说明这是个负数的补码。负数的补码,是由其绝对值的原码取反加1得到,反过来,将负数的补码减1取反,就得到其绝对值的原码。11111101-1=11111100,再取反得到00000011,即十进制的3。也就是说该负数的绝对值为3,那么这个负数为-3。
所以第一个值是-3
整型的每一种都分有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。
你声明变量无符号,将二进制转换无符号在转换十进制,导致最高位由原来的符号位变成了有效数字位了,参与转换
所以最后结果是253
你去掉前面的unsigned 两个值应该是一样的
本文来自作者[夜之]投稿,不代表雷雅号立场,如若转载,请注明出处:https://ajtg.com.cn/tg/17943.html
评论列表(4条)
我是雷雅号的签约作者“夜之”!
希望本篇文章《四字节整数转换成双字节整数(明白人来)》能对你有所帮助!
本站[雷雅号]内容主要涵盖:生活百科,小常识,生活小窍门,知识分享
本文概览:是这个意思,这个内存地址开始的四个字节的内容(二进制)是:10001100 00001010 00000010 00000000因为 Intel 计算机存储数据是高位反序的,因...