C语言中二进制求补码过程中取反后再加1,那个1是怎么加的
发布时间:2025-05-13 11:28:22 发布人:远客网络
一、C语言中二进制求补码过程中取反后再加1,那个1是怎么加的
二进制运算当然是在二进制数字间的运算。正数的补码等于原码,负数的补码就是取反加一(符号位不动)。举个“栗子”:\x0d\x0a求-7的补码。\x0d\x0a因为给定数是负数,则符号位为“1”。\x0d\x0a后七位:-7的原码(10000111)→按位取反(11111000)(负数符号位不变)→加1(11111001加在末尾了),所以-7的补码是11111001。\x0d\x0a\x0d\x0a如果末位为1,加1后要进位,即‘10’。二进制只有0和1,不会出现‘2’的。
二、c语言中补码怎么算的
C语言中,所有的整型数据实际存储的都是补码。要计算补码,先要知道原码的概念,原码也就是一个10进制数的二进制表达方式,比如100的原码为1100100。
1、对于无符号数以及有符号数中的正数,其补码就是原码本身;
2、对于有符号数中的负数,其补码为真值绝对值的反码加一,其中反码为原码按位取反。
三、C语言原码补码问题
1、你的这个是16的,我可以给你用8位解释一下(原理是一样的,我打起来比较方便~)
2、我们知道,8位二进制的补码表示范围是-128~127对吧。
3、而在计算机中数据都是以二进制补码进行存储的,那么-128的存储方式就是1000 0000,而它是没有原码和反码的,所以你不太能验证,对吧。
4、这是因为在计算机中,为了溢出特意定义的一个小玩意儿~
5、所以放到16来解释,它的最小值也是-32768。
6、但这已经是最小的数了,再减就会溢出……(理论上是这样的)
7、但是现实中的程序编译有一定的容错性,只要到了一定的计算机承认的位数就变成-1了。
8、这是因为计算机中的数好像一个轮回……
9、这个是我的计算机能接受的范围。
10、如果你的程序要求指定了16位,那么就是-1,如果高于16位,就是-32769。